JiraRemoteUserAuth
配置Jira7.x版本使用REMOTE_USER的HTTP Header方式登录:
前提是已经安装好了JIRA,并且前端使用apache或者nginx拦截对应的地址进行认证,认证之后访问对应的应用的时候,返回一个HTTP HEADER 给应用,标识是哪个用户
关于配置apache的mod_auth_cas以及添加相应的HTTP Header,请参考这篇文章
步骤:
1.实现自己的Authenticator
在jiar的 classes目录下的seraph-config.xml文件中配置的默认的Authenticator是com.atlassian.jira.security.login.JiraSeraphAuthenticator,我们需要仿照它的实现,重新实现一个Authenticator,首先新建一个java工程,导入jiar的相关的依赖包(就是jira对应的WEB-INF/lib目录里的jar包和 WEB-INF/classes目录中的class文件,同时,还要导入servlet-api.jar)
新建一个类,代码如下:
package cn.cmri.atlassian.jira.auth;
/*
* Created with Intellij IDEA
* USER: JiaoYping
* Mail: jiaoyiping@gmail.com
* Date: 2017/10/16
* Time: 15:43
* To change this template use File | Settings | Editor | File and Code Templates
*/
import com.atlassian.jira.component.ComponentAccessor;
import com.atlassian.jira.user.util.UserManager;
import com.atlassian.seraph.auth.AuthenticatorException;
import com.atlassian.seraph.auth.DefaultAuthenticator;
import java.security.Principal;
public class JiraRemoteUserAuth extends DefaultAuthenticator {
private static final String REMOTE_USER_HEADER = "remote_user";
@Override
protected Principal getUser(String userName) {
return getUserManager().getUserByName(userName);
}
@Override
protected boolean authenticate(Principal principal, String password) throws AuthenticatorException {
//在能够访问到这个段代码之前,就已经通过了apache的认证了,所以,直接返回true
return true;
}
@Override
public Principal getUser(javax.servlet.http.HttpServletRequest httpServletRequest, javax.servlet.http.HttpServletResponse httpServletResponse) {
String remoteUser = httpServletRequest.getHeader(REMOTE_USER_HEADER);
if (getUser(remoteUser) != null) {
return getUser(remoteUser);
}
return super.getUser(httpServletRequest, httpServletResponse);
}
private UserManager getUserManager() {
return ComponentAccessor.getUserManager();
}
}
编译这个java文件为class文件,放到jira的WEB-INF/classes下的对应目录里
2.修改seraph-config.xml文件中的authenticator为自己实现的Authenticator,注释掉原先的配置。
<!--<authenticator class="com.atlassian.jira.security.login.JiraSeraphAuthenticator"/>-->
<authenticator class="cn.cmri.atlassian.jira.auth.JiraRemoteUserAuth"/>
重新启动JIRA,enjoy
JiraRemoteUserAuth的更多相关文章
随机推荐
- HttpURLConnection和HttpClient的区别2(转)
1.HttpClient比HttpURLConnection功能更强大,但是做java建议用前者,安卓建议用后者 2.这两者都支持HTTPS,streaming 上传与下载,配置超时时间,IPv6, ...
- c++ String去除头尾空格
1.使用string的find_first_not_of,和find_last_not_of方法 #include <iostream> #include <string> s ...
- SharePoint 2013 隐藏左边快速启动菜单栏(Hiding the Quick Launch Bar)
在SharePoint 2013默认网站页面中,很多时候,我们需要隐藏左边快速启动菜单栏,这时我们可以通过下面的样式来实现隐藏它. 和SharePoint 2010不太一样,方法改了,不过性质是一样的 ...
- LinuxMint下tty.js的安装指南
1.简介 tty.js是使用Node.js开发的开源Web-based SSH.通过浏览器即可远程访问shell. 关于Web-based SSH的介绍参考https://en.wikipedia.o ...
- UNIX环境编程学习笔记(26)——多线程编程(一):创建和终止线程
lienhua342014-11-08 在进程控制三部曲中我们学习了进程的创建.终止以及获取终止状态等的进程控制原语.线程的控制与进程的控制有相似之处,在表 1中我们列出了进程和线程相对应的控制原语. ...
- JSON.stringify报cyclic object value错误
这是一个典型的循环引用的错误,一个对象里引用自己就会立刻得到这个错误: obj = { x:555, y: "hi" }; obj.myself = obj; try{ json ...
- js堆栈与队列简单记忆
在面向对象的程序设计里,一般都提供了实现队列(queue)和堆栈(stack)的方法,而对于JS来说,我们可以实现数组的相关操作,来实现队列和堆栈的功能,看下面的相关介绍. 一 看一下它们的性质,这种 ...
- Java虚拟机(JVM)你只要看这一篇就够了!
1. Java 内存区域与内存溢出异常 1.1 运行时数据区域 根据<Java 虚拟机规范(Java SE 7 版)>规定,Java 虚拟机所管理的内存如下图所示. 1.1.1 程序计数器 ...
- 2 python大数据挖掘系列之淘宝商城数据预处理实战
preface 在上一章节我们聊了python大数据分析的基本模块,下面就说说2个项目吧,第一个是进行淘宝商品数据的挖掘,第二个是进行文本相似度匹配.好了,废话不多说,赶紧上车. 淘宝商品数据挖掘 数 ...
- jquery判断某个属性是否存在 hasAttr
在JQuery编码中,我们会判断元素是否存在某个属性.比如是否包含 class="new" 的样式呢.JQuery判断就非常简单了,因为有 hasClass这个方法 $(" ...