配置confluence使用httpHeader的方式进行登录(目标版本:atlassian-confluence-6.3.3)

前提是已经安装好了Confluence,并且前端使用apache或者nginx拦截对应的地址进行认证,认证之后访问对应的应用的时候,返回一个HTTP HEADER 给应用,标识是哪个用户

关于配置apache的mod_auth_cas以及添加相应的HTTP Header,请参考这篇文章

步骤:

1.实现自己的Authenticator

新建java项目,导入confluence相关依赖,新建java文件如下:

package cn.cmri.atlassian.confluence;
/*
* Created with Intellij IDEA
* USER: JiaoYiping
* Mail: jiaoyiping@gmail.com
* Date: 2017/8/24
* Time: 16:48
* To change this template use File | Settings | Editor | File and Code Templates
*/ import com.atlassian.confluence.user.ConfluenceAuthenticator; import javax.servlet.http.HttpServletRequest;
import java.security.Principal; public class ConfluenceRemoteUserAuthenticator extends ConfluenceAuthenticator {
private static final String REMOTE_USER_HEADER = "remote_user"; @Override
public Principal getUser(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) {
String remoteUserHeader = request.getHeader(REMOTE_USER_HEADER);
Principal remoteUser = this.getUser(remoteUserHeader);
if (this.getUserFromSession(request) != null) {
Principal currentUser = getUserFromSession(request);
if (remoteUserHeader != null && !currentUser.getName().equals(remoteUserHeader)) {
setSessionAttribute(remoteUser, request);
return remoteUser;
}
return getUserFromSession(request);
} if (remoteUserHeader != null && remoteUser != null) {
setSessionAttribute(remoteUser, request);
return remoteUser;
}
return super.getUser(request, response);
} private void setSessionAttribute(Principal user, HttpServletRequest request) {
if (user != null && request != null) {
request.getSession().setAttribute("seraph_defaultauthenticator_user", user);
request.getSession().setAttribute("seraph_defaultauthenticator_logged_out_user", (Object) null);
}
}
}

编译该文件,并把相应的class文件放到confluence的WEB-INF/classes下的相应位置

2.在confluence的WEB-INF/classes下,修改seraph-config.xml,把之前配置的Authenticator替换为自己实现的Authenticator

<!--<authenticator class="com.atlassian.confluence.user.ConfluenceAuthenticator"/>-->

<authenticator class="cn.cmri.atlassian.confluence.ConfluenceRemoteUserAuthenticator"/>

重启confluence,经过反向代理认证之后,跳转到该应用的请求,如果带上remote_user这个header,就会自动登录

ConfluenceRemoteUserAuth的更多相关文章

随机推荐

  1. SAX解析XML笔记

    关于基本操作,请参考:Java用SAX解析XML,这里不重复造轮子了,以下是个人笔记:

  2. 支持Android 的几款开源3D引擎调研

    最近由于工作需要,对支持Android的一些开源3D引擎做了调研,结果如下: 1.Ogre 十分强大的一款3D引擎,号称工业级标准的开源项目,不仅可以用于游戏,还可以用于其他和3D相关的软件.大多数该 ...

  3. stdClass object 数据获取方法

    $data = stdClass Object ( [code] => [data] => stdClass Object ( [country] => 未分配或者内网IP [cou ...

  4. lnmp手动新建虚拟机

    1.在home/wwwroot/zhongjie   新建zhongjie文件夹 2.在usr/local/nginx/conf/vhost/zhongjie.conf    新建配置文件zhongj ...

  5. 禁止选中文本JS

    if (typeof(element.onselectstart) != "undefined") { // IE下禁止元素被选取 element.onselectstart = ...

  6. Unity对象池管理

    链接: http://www.xuanyusong.com/archives/2925 http://www.xuanyusong.com/archives/2974 https://www.cnbl ...

  7. 关于python 的空的__init__.py文件的作用,可不可以删除,到底有没有用?

    0.声明,本篇只讨论空__init__.py文件的情况,不顾前提非得说__init__.py文件里面也可以写东西的不在此讨论了范围之内,重点是个"空"字. 1.很多地方的文件夹都有 ...

  8. 入门常用SQL及官方文档的使用

    SQL语句基础理论 SQL是操作和检索关系型数据库的标准语言,标准SQL语句可用于操作关系型数据库. 5大主要类型: ①DQL(Data Query Language,数据查询语言)语句,主要由于se ...

  9. XSS payload 大全

    收集的一些XSS payload,主要分为五大类,便于查阅. #第一类:Javascript URL <a href="javascript:alert('test')"&g ...

  10. SpringBoot(五)-- 整合Spring的拦截器

    一.步骤 1.创建我们自己的拦截器类并实现 HandlerInterceptor 接口. 2.创建一个Java类继承WebMvcConfigurerAdapter,并重写 addInterceptor ...