对于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"
.但它也将我重定向到公共 URL 访问/login
,例如 /publicAccess
.
我希望公共 URL 直接打开,即使没有会话或无效会话也是如此。我该怎么做?
即使命中公共 URL 也要求将请求重定向到登录页面的原因是您需要对用户进行匿名身份验证。同时,您没有为应用程序设置匿名身份验证机制。为了设置它,您有两种选择:
- 使用
auto-config="true"
自动包含它。 - 如果您不希望自动配置带来的所有内容,请使用
<http>
下的<anonymous>
有选择地启用它。
正如您在链接文档中看到的,<anonymous>
将添加
堆栈的
AnonymousAuthenticationFilter
和AnonymousAuthenticationProvider
.如果使用IS_AUTHENTICATED_ANONYMOUSLY
属性,则为必需。
我通过使用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>
:)