Spring安全性与Tomcat基本授权之间的冲突

时间:2010-10-28 08:24:10

标签: tomcat spring-security basic-authentication

在Tomcat下激活基本授权时,是否有人遇到Spring安全登录问题?

登出后加载登录页面时无法登录。如果你刷新页面然后再试一次,一切都很好:)(。

1 个答案:

答案 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种方法可以避免这个错误:

  1. 禁用Tomcat的会话替换。您可以在context.xml中配置Valve

    <Valve className="org.apache.catalina.authenticator.BasicAuthenticator"
                                   changeSessionIdOnAuthentication="false"/>
    
  2. 禁用Spring安全配置security.xml的会话替换。

    <http ... session-fixation-protection="none">
         .....
    </http>
    
  3. 退出后提供额外的重定向。这样,Tomcat将在登录请求期间在会话中缓存一个Principle。

  4. 也许这可以保护昨天像我一样疯狂的人:)

    关于, 埃德加