迁移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";
        }
    }
}
相关推荐
郑州光合科技余经理4 小时前
代驾系统架构拆解:订单链路、权限组织与私有化源码交付
开发语言·后端·算法·架构·系统架构·uni-app·php
码哥DFS7 小时前
二叉树的直径
开发语言·javascript·算法
paopaokaka_luck8 小时前
基于springboot3+vue3的企业考勤管理系统(部门树递归、Echarts图形化分析)
开发语言·spring boot·学习·echarts·mybatis·需求分析·代码规范
Pluchon8 小时前
Java个人综合项目——萌部落社区V2.0
java·python·spring·spring cloud·postman·idea
梦雨生生9 小时前
java开发工具(学习第一天)
java·开发语言·学习
她说可以呀10 小时前
Spring-ai-alibaba文生图
java·人工智能·spring
啊啊啊啊啊!!!!10 小时前
【c++】stack和queue的接口使用以及底层实现
开发语言·c++
松仔log11 小时前
Java中级——组合和继承
android·java·开发语言
不才不才不不才11 小时前
Spring 源码系列(16): doDispatch 全流程——一次请求的主干链路
java·后端·spring
snow@li12 小时前
HikariCP:高性能数据库连接池全景深入梳理
java·数据库