Spring Security与Tomcat基本授权冲突
Posted
技术标签:
【中文标题】Spring Security与Tomcat基本授权冲突【英文标题】:Conflict between spring security and basic authorization of Tomcat 【发布时间】:2011-05-01 18:11:58 【问题描述】:有人在Tomcat下激活基本授权时遇到spring security login的问题吗?
注销后加载登录页面时根本无法登录。如果您刷新页面并重试,一切都很好:)(。
【问题讨论】:
您应该将“信息”的后半部分更改为前半部分问题的答案。然后你就可以获得一些声望! 感谢您的建议! :) 【参考方案1】:我找不到任何对这种行为的抱怨,并花了一整天的时间来找出问题所在。最后,它弹出原因是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。
也许这可以保护昨天像我一样发疯的人:)
关于, 埃德加
【讨论】:
以上是关于Spring Security与Tomcat基本授权冲突的主要内容,如果未能解决你的问题,请参考以下文章
将 Tomcat NTLM 与 Spring Security 一起使用
将 Tomcat 上的 Spring Security 和 Waffle 与角色检查集成
会话混合 - apache httpd 与 mod_jk、tomcat、spring security - 提供其他用户的数据
Tomcat 上的 Spring Security/JSF/Hibernate 意外会话劫持?