posts - 145,comments - 23,views - 73万

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

posted on   梦中彩虹  阅读(748)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示