首页 > 解决方案 > 使用过滤器共享登录主题

问题描述

我在当前支持表单身份验证的应用程序中实现单点登录。我使用 shiro 作为安全框架。

我有一个 servlet,它接收 saml 断言并在用户中记录如下:

Subject subject = SecurityUtils.getSubject();
subject.login(new SAMLToken(assertions));

主题认证成功,但是根据shiro规范,只在这个线程上。问题是我有一个在不同线程上运行的身份验证过滤器,我希望该主题也在该线程上进行身份验证。

有可能实现这一目标吗?谢谢!

标签: javasecuritysingle-sign-onshiro

解决方案


您可能会创建一个过滤器(类似于其中之一),在其中将入站请求转换为您的 SAML 令牌。所有会话管理(和login()呼叫)都将为您处理。

例如对于基本身份验证,从请求标头创建一个令牌:

https://github.com/apache/shiro/blob/f782eb1084df73eff3e2ac0f9780cb4a4f429041/web/src/main/java/org/apache/shiro/web/filter/authc/BasicHttpAuthenticationFilter.java#L353-L374


推荐阅读