迁移shibboleth java获取shibboleth用户信息

迁移shibboleth:

需迁移的文件:

shibboleth2.xml:idp和sp的相关配置(关键)

sp-encrypt-cert.pem

sp-encrypt-key.pem

sp-signing-cert.pem

sp-signing-key.pem

attribute-map.xml:从idp中获取的用户信息id(关键)

httpd中配置:
ssl.conf

javascript 复制代码
<Location /sso>
    AuthType shibboleth
    ShibRequireSession On
    Require shibboleth
    
    # 关键:将 Shibboleth 属性作为 HTTP Header 传递给后端
    ShibUseHeaders On
    
    # 可选:指定传递哪些属性(如果不设置,传递所有属性)
    # ShibExportAssertion On
    
    ProxyPass http://127.0.0.1:10000/xxx/sso/login
    ProxyPassReverse http://127.0.0.1:10000/xxx/sso/login
    
    # 确保 Header 能被代理传递
    ProxyPreserveHost On
</Location>

Java 后端获取 Shibboleth 属性

java 复制代码
import cn.hutool.http.HttpUtil;
import cn.hutool.http.HttpRequest;
import javax.servlet.http.HttpServletRequest;
import java.util.Enumeration;

@RestController
public class SsoController {
    
    @GetMapping("/xxx/sso/login")
    public String ssoLogin(HttpServletRequest request) {
        // Shibboleth 属性会以 HTTP Header 形式传递
        // 例如: displayName -> displayName
        
        String uid = request.getHeader("uid");
        String displayName = request.getHeader("displayName");
        String givenName = request.getHeader("givenName");
        String surname = request.getHeader("surname");
        String eduPersonPrimaryAffiliation = request.getHeader("eduPersonPrimaryAffiliation");
        
        // 调试:打印所有 Header
        Enumeration<String> headers = request.getHeaderNames();
        while (headers.hasMoreElements()) {
            String name = headers.nextElement();
            System.out.println(name + ": " + request.getHeader(name));
        }
        
        // 你的业务逻辑
        if (uid != null) {
            // 登录成功,创建 session 或 token
            return "Login success for: " + displayName + " (" + uid + ")";
        } else {
            return "No Shibboleth attributes found";
        }
    }
}
相关推荐
懂点Tech7 小时前
ctfshow misc28:GIF 高度修改解题与脚本实现
开发语言·windows·python
云和数据.ChenGuang7 小时前
Python 重写(Override)深度解析:从 MRO 到 super() 的完整机制
java·开发语言·人工智能·python·langchain·1024程序员节
摇滚侠7 小时前
《On Java 中文版 基础卷》阅读笔记 实现隐藏 12
java·数据库·笔记
美狐美颜SDK开放平台8 小时前
视频美颜SDK试用DEMO阶段应该测试什么?直播APP接入实操指南
开发语言·人工智能·深度学习·音视频·美颜sdk·直播美颜sdk·第三方美颜sdk
dtq04248 小时前
C++小案例 - 日志实战
开发语言·c++
星夜离尘568 小时前
MATLAB ADC 码流触顶诊断:命中数、缺口分段与削顶不可辨识性
开发语言·matlab
码匠许师傅9 小时前
【C++三方组件】Qt 概览:桌面 C++ 的事实标准与许可证三轨
开发语言·c++·qt
码匠许师傅10 小时前
【C++三方组件】POCO:跨平台系统编程全家桶
开发语言·c++
silvamux_10 小时前
10款模型写种草笔记:可发布性、返工来源与成本数据缺口复盘
java·数据库·笔记
bkspiderx10 小时前
基于Socket的广播通信及C语言实现详解
c语言·开发语言·socket·广播·socket的广播通信