在Tomcat下激活基本授权时,是否有人遇到Spring安全登录问题?
登出后加载登录页面时无法登录。如果你刷新页面然后再试一次,一切都很好:)(。
答案 0 :(得分:5)
我找不到任何关于这种行为的抱怨,并花了一整天时间来找出问题所在。最后,它突然显示原因是Tomcat中的一个错误,它在6.0.20到6.0.28(Bug 49598)的版本中可用。
问题在于,Tomcat的基本授权和Spring安全性都会在授权请求期间替换会话。由于注销使会话无效,因此在同一请求处理期间触发两个会话替换后直接登录请求。但是,在错误的结果中,响应中的Set-Cookie标头仍然指向Tomcat给出的会话ID(由Spring安全性使其无效,因为它可以工作)。因此,下一个请求发送已经被破坏的会话的cookie。由Spring创建的会话(包含签名用户)仍然无人认领。
最好的解决方案是Tomcat 6.0.29 :-)。 如果某人有Tomcat升级问题,有3种方法可以避免这个错误:
禁用Tomcat的会话替换。您可以在context.xml中配置Valve
<Valve className="org.apache.catalina.authenticator.BasicAuthenticator"
changeSessionIdOnAuthentication="false"/>
禁用Spring安全配置security.xml的会话替换。
<http ... session-fixation-protection="none">
.....
</http>
退出后提供额外的重定向。这样,Tomcat将在登录请求期间在会话中缓存一个Principle。
也许这可以保护昨天像我一样疯狂的人:)
关于, 埃德加