ConfluenceRemoteUserAuth

配置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,就会自动登录

转载于:https://www.cnblogs.com/jiaoyiping/p/7683828.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值