我有一个 Spring Web 应用程序,它使用 Spring SAML 和 Spring Security 来管理登录过程。
现在我需要在正确登录后执行一些任务。特别是我必须在 SecurityContext.getContext()
对象中存储一些数据。
我从未使用过 Spring Security/SAML,我不知道它如何管理来自 IdP 的返回。
在登录过程正确结束后,代码中是否有任何地方通常可以放置您的代码?
我的意思是,我知道重定向页面的设置位置,但我无法将我的自定义代码放入此重定向页面的 Controller 中,因为该页面被多次访问,我只需要在登录时运行我的自定义代码一次时间。
最佳答案
最好的方法是实现接口(interface) SAMLUserDetailsService
,它会自动存储你从它的 loadUserBySAML
方法返回的对象到你创建的 Authentication
对象中稍后可以从 SecurityContext.getContext()
查询。每次认证后都会调用一次该接口(interface)。参见 the manual有关详细信息和示例。
另一种可能性是AuthenticationSuccessHandler
。登录过程调用 onAuthenticationSuccess 方法,该方法可以访问 Authentication
对象,该对象将存储在 SecurityContext.getContext() 中。
只需创建您自己的实现接口(interface)AuthenticationSuccessHandler
的类(您还可以扩展一些现有的类,例如SimpleUrlAuthenticationSuccessHandler
或AbstractAuthenticationTargetUrlRequestHandler
) .然后通过更改现有 successRedirectHandler
bean 中的类,将您的实现插入 securityContext.xml
。
问题是,Authentication
对象往往是不可变的 - 因此第一种方法可能更好。
关于java - 使用Spring Security登录后如何做?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28903188/