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的更多相关文章
随机推荐
- c++ int string互转
1. ){ monthNumber = "; itoa(i+,iCharArray,); monthNumber += iCharArray; } else { itoa(i+,iCharA ...
- UNIX环境编程学习笔记(8)——文件I/O之校验当前登录用户对文件的访问权限
lienhua342014-09-03 通过前面一篇随笔(文件访问权限与进程访问控制),我们知道内核校验文件的访问权限使用的是进程的有效用户 ID 和有效组 ID.但有时我们需要知道当前登录用户对某个 ...
- 【git】git pull
http://www.01happy.com/git-resolve-conflicts/
- 文件流方式 删除prefab空脚本
/// <summary> /// 删除一个Prefab上的空脚本 /// </summary> /// <param name="path"> ...
- Android开发学习笔记-SharedPreferences的用法
SharedPreferences介绍: 做软件开发应该都知道,很多软件会有配置文件,里面存放这程序运行当中的各个属性值,由于其配置信息并不多,如果采用数据库来存放并不划算,因为数据库连接跟操作等 ...
- Git学习笔记(三)
Git提交相关内容 在Git提交时,会保存一个提交对象,该对象包括一个指向暂存区内容快照的指针,包括本次提交作者等相关附属信息,包括零个或多个指向该提交对象的父对象指针:首次提交时是没有祖先,普通提交 ...
- RedHat6.5-Linux安装telnet服务
1 下载以下三个包 telnet-0.17-47.el6.x86_64.rpm(telnet客户端) telnet-server-0.17-47.el6.x86_64.rpm(telnet服务端) x ...
- iOS UTI(统一类型标识)
同一类型标识符(Uniform Type Identifier,UTI)代表IOS信息共享的中心组件.可以把它看成下一代的MIME类型.UTI是标识资源类型(比如图像和文本)的字符串,他们制定哪些类型 ...
- Netty权威指南之NIO通信模型
NIO简介:与Socket和ServerSocket类相对应,NIO提供了SocketChannel和ServerSocketChannel两种不同的套接字通道实现,这两种新通道都支持阻塞和非阻塞两种 ...
- Linux应急响应(四):盖茨木马
0x00 前言 Linux盖茨木马是一类有着丰富历史,隐藏手法巧妙,网络攻击行为显著的DDoS木马,主要恶意特点是具备了后门程序,DDoS攻击的能力,并且会替换常用的系统文件进行伪装.木马得名于其 ...