Spring Security预授权重新认证

时间:2014-09-10 18:09:31

标签: java spring spring-security

使用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安全性配置为重新授权?

谢谢!

1 个答案:

答案 0 :(得分:1)

您应该可以通过将pre-auth过滤器上的checkForPrincipalChanges属性设置为true来实现此目的。

来自API文档:

  

将对每个请求检查预先验证的主体,并将其与当前Authentication对象的名称进行比较。如果检测到更改,则将重新验证用户。

您可能还想设置invalidateSessionOnPrincipalChange属性(如果您希望忘记上一个会话)。