使用Spring Security 3.2.5和Spring 4.0.6。 Spring Security配置为使用http标头进行预身份验证。
Spring Security正确地抓取标头,查找用户,并从数据库中获取身份验证角色。
问题是,当用户注销并以新用户身份登录时,spring安全性不会检测到已更改的标头,但仍会返回先前登录的用户。
1 - 通过外部应用程序(siteminder)以#1用户身份登录
2 - spring security正确报告登录的用户#1
3 - 在应用程序之外,注销siteminder
4 - 通过siteminder以#2用户身份登录
5 - 在网络应用程序中,弹出安全性现在错误地报告了当siteminder为用户#2提供标题信息时登录的用户#1
在spring-security.xml中我尝试添加一个spring安全性指令,以便不缓存用户,但它在应用程序中有异常。
<security:http create-session="stateless" />
ApplicationEventMulticaster not initialized - call 'refresh' before multicasting events via the context: Root WebApplicationContext: startup date [Wed Sep 10 11:57:10 MDT 2014]; root of context hierarchy
Configuration problem: No AuthenticationEntryPoint could be established. Please make sure you have a login mechanism configured through the namespace (such as form-login) or specify a custom AuthenticationEntryPoint with the 'entry-point-ref' attribute
如何在预身份验证标头更改时将spring安全性配置为重新授权?
谢谢!
答案 0 :(得分:1)
您应该可以通过将pre-auth过滤器上的checkForPrincipalChanges
属性设置为true来实现此目的。
来自API文档:
将对每个请求检查预先验证的主体,并将其与当前Authentication对象的名称进行比较。如果检测到更改,则将重新验证用户。
您可能还想设置invalidateSessionOnPrincipalChange
属性(如果您希望忘记上一个会话)。