迁移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 分钟前
Java I/O、文件与 Android 存储
java
wno70411 分钟前
Spring Security基础使用
java·后端·spring
孙启超21 分钟前
【AI开发之Rust】第 8 课:泛型、trait 与 trait 对象
开发语言·后端·rust
2501_933670791 小时前
经营财务岗技能栈拆解:Excel、SQL、BI、预算分析怎么准备
开发语言
小蒜学长1 小时前
基于RFID技术的仓储管理系统设计(代码+数据库+LW)
java·数据库·spring boot·后端·rfid技术·仓储管理
梦影_1 小时前
Langchain简单快速上手教程(五)——聊天模型之流式传输
java·数据库·人工智能·python·langchain
数据狐(Datafox)1 小时前
1688商品列表API接口解析(附 JSON 样例)
java·开发语言·数据库·爬虫·json
xcl09251 小时前
健身场馆无人自动化系统:从架构设计到落地实践
java·spring boot
EatFan1 小时前
一个二维码背后的系统设计:批次生成、绑定、扫码与数据统计怎么做?
java·后端·微信小程序·二维码·qrcode
白远山1 小时前
自助健身小程序源码:架构拆解、核心链路与本地部署实战
java·架构·uni-app·需求分析