迁移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";
        }
    }
}
相关推荐
凤凰院凶涛QAQ3 分钟前
《Java版数据结构 & 集合类剖析》集合框架的封装设计与顺序表:“从 Iterable 到 ArrayList:集合框架的‘职业树“
java·开发语言·数据结构
孟华苏17 分钟前
怎么快速排查内存泄漏问题
java·开发语言·python
zz345729811319 分钟前
C语言中字符串常量存储位置
c语言·开发语言·算法·青少年编程
noipp20 分钟前
推荐题目:洛谷 P16510 [GKS 2015 #C] gRanks
java·c语言·开发语言·c++·python·算法
flyinmind20 分钟前
Java环境与Android环境中使用QuickJS
java·开发语言·javascript·quickjs
郑洁文21 分钟前
基于Python的HTTP服务漏洞信息收集工具设计与实现
开发语言·python·http
不吃鱼的羊22 分钟前
DaVinci Developer自动连接
java·开发语言
Evand J25 分钟前
【MATLAB例程】VSIMM与IMM在机动目标跟踪中的性能对比,CV+CT双模型
开发语言·matlab·目标跟踪
farerboy28 分钟前
15-Java while 和 do...while循环
java·后端
Meteors.29 分钟前
Kotlin协程序使用技巧和应用场景
android·开发语言·kotlin