Spring 3.1重定向到/登录会话 - 即使是公共URL访问也无效

时间:2013-07-27 13:10:41

标签: spring spring-mvc spring-security

对于Spring Security 3.1,我有以下映射:

<security:http create-session="ifRequired" auto-config="false" disable-url-rewriting="true" entry-point-ref="authenticationProcessingFilterEntryPoint">

  <security:intercept-url pattern="/publicAccess" access="IS_AUTHENTICATED_ANONYMOUSLY" />

  <security:logout logout-url="/logout" invalidate-session="true" delete-cookies="true" logout-success-url="/thanks" />
  <security:session-management invalid-session-url="/login" session-authentication-error-url="/accessdenied">
    <security:concurrency-control max-sessions="1" expired-url="/login?session=expired" />
  </security:session-management>
</security:http>

情况是,当我不进行某项活动一段时间或重新启动服务器时,我会被引导至/login映射。这是正确的,因为invalid-session-url="/login"。但它也会将我重定向到/login以获取公共网址,例如/publicAccess

即使没有会话或无效会话,我也希望公开网址直接打开。我怎么能这样做?

2 个答案:

答案 0 :(得分:0)

即使在访问公共URL时,请求被重定向到登录页面的原因是您需要对用户进行匿名身份验证。同时,您没有为应用程序设置匿名身份验证机制。为了进行设置,您有两种选择:

  1. 使用auto-config="true"自动加入。
  2. 如果您不希望自动配置带来所有内容,请使用<http>下的<anonymous>来有选择地启用它。
  3. 正如您在链接的文档中看到的那样,<anonymous>将添加

      

    堆栈的AnonymousAuthenticationFilterAnonymousAuthenticationProvider。如果您使用IS_AUTHENTICATED_ANONYMOUSLY属性,则必填。

答案 1 :(得分:0)

我使用session-fixation-protection="none"修复了它。

<security:session-management invalid-session-url="/login" session-fixation-protection="none" session-authentication-error-url="/accessdenied">
    <security:concurrency-control max-sessions="1" expired-url="/login?session=expired" />
</security:session-management>

:)