2010-10-28 52 views
2

在Tomcat下激活基本授权时,有人遇到Spring安全登录问题吗?春季安全与Tomcat基本授权之间的冲突

注销登录页面后登录时,登录根本无法登录。如果你刷新页面,然后再试一次,一切都很好:)(。

+0

您应该在“消息”下半年变成一个答案,上半年的问题。那么你可以获得一些声誉! – 2011-02-18 11:03:13

+0

感谢您的建议! :) – Edgar 2011-03-01 06:05:27

+0

你走了。 :-) – 2011-03-01 09:19:01

回答

5

我找不到任何抱怨这样的行为,花了一整天的时间来找出问题。最后,它弹出,原因是错误在Tomcat中,可用的版本从6.0.20到6.0.28(Bug 49598

问题在于Tomcat的基本授权和Spring安全性在授权请求期间会替换会话。会话,在同一个请求处理期间触发两个会话替换之后的直接登录请求。但是,在错误的结果中,响应中的Set-Cookie头仍然指向由Tomcat给出的会话ID(由Spring安全,因为它的工作ER)。所以,下一个请求会发送已经被销毁的会话的cookie。 Spring创建的会话(包含签名用户)仍然未被声明。

最好的解决方案是Tomcat 6.0.29 :-)。 如果有人有Tomcat的升级问题,有3种可能性,以避免故障:

  1. 禁用会话更换的Tomcat。您可以在context.xml中做配置阀门

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

    <http ... session-fixation-protection="none"> 
        ..... 
    </http> 
    
  3. 注销后提供额外的重定向。通过这种方式,Tomcat将在登录请求期间在会话中缓存一条原则。

也许这可以保护越来越疯狂像我昨天:)

与问候, 埃德加有人