gvd*_*vdm 4 java spring spring-security spring-saml
我有一个 Spring Web 应用程序,它使用 Spring SAML 和 Spring Security 来管理登录过程。现在我需要在正确登录后执行一些任务。特别是我必须在SecurityContext.getContext()对象中存储一些数据。
我从未与 Spring Security/SAML 合作过,我不知道它如何管理来自 IdP 的回报。
代码中是否有任何地方通常可以在登录过程正确结束后放置代码?
我的意思是,我知道重定向页面的设置位置,但我不能将我的自定义代码放在这个重定向页面的控制器中,因为该页面被访问多次,而且我只需要在登录时运行我的自定义代码一次。
最好的方法是实现接口SAMLUserDetailsService,它会自动将您从其loadUserBySAML方法返回的Authentication对象存储在您以后可以从SecurityContext.getContext(). 每次认证后都会调用该接口一次。有关详细信息和示例,请参阅手册。
另一种可能性是AuthenticationSuccessHandler。登录过程调用 onAuthenticationSuccess 方法,该方法有权访问该Authentication对象,该对象将存储在 SecurityContext.getContext() 中。
只需创建您自己的实现接口的类AuthenticationSuccessHandler(您也可以扩展一些现有类,例如SimpleUrlAuthenticationSuccessHandler或AbstractAuthenticationTargetUrlRequestHandler)。然后securityContext.xml通过更改现有successRedirectHandlerbean 中的类将您的实现插入到。
问题是,Authentication对象往往是不可变的——所以第一种方法可能更好。
| 归档时间: |
|
| 查看次数: |
5253 次 |
| 最近记录: |