0

对于 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公共 URL 访问,例如/publicAccess.

我希望公共 URL 直接打开,即使没有会话或会话无效。我怎样才能做到这一点?

4

2 回答 2

0

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

  1. 用于auto-config="true"自动包含它。
  2. 如果您不想要自动配置带来的所有东西,请使用<anonymous>under<http>选择性地启用它。

正如您在链接的文档中看到的,<anonymous>将添加

一个AnonymousAuthenticationFilter到堆栈和一个AnonymousAuthenticationProvider. 如果您使用该IS_AUTHENTICATED_ANONYMOUSLY属性,则为必需。

于 2013-07-27T14:47:37.360 回答
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>

:)

于 2013-07-28T06:50:27.020 回答