6

我有一个基于 Spring 的 wenb 应用程序,我正在实施 Spring Security 3.1。

我需要的是能够在配置的会话超时发生时自动重定向到登录页面。我正在实现包含大量 jQuery 功能的网页,因此我需要能够自动重定向。

当前发生的情况是,当会话超时过去时,直到执行操作 - 页面提交才会重定向到登录页面。

我的spring-security.xml:

<http auto-config="true" disable-url-rewriting="true">
    <intercept-url pattern="/test/user*" access="ROLE_USER, ROLE_ADMIN"  />
    <intercept-url pattern="/test/admin" access="ROLE_ADMIN"  />
    <form-login login-page="/test/login" 
            default-target-url="/test/home" 
            authentication-failure-url="/test/loginfailed" />
    <logout invalidate-session="true" logout-success-url="/test/logout" />
    <!--
    <session-management invalid-session-url="/test/login">
        <concurrency-control max-sessions="1" error-if-maximum-exceeded="true"/>
    </session-management>
    -->
</http> 

在我的 web.xml 中,我有:

<!-- Web Session Timeout (mins) --> 
<session-config> 
    <session-timeout>10</session-timeout> 
</session-config>   
4

3 回答 3

1

我认为您不需要自己做,Spring 几乎可以自己处理。这就是春天的魅力!

于 2017-01-29T16:18:48.610 回答
0

我会尝试什么!要做的是这样的:

  • 配置 spring 安全性,它不会将 http 状态代码 200(OK)重定向(303/307)发送到登录页面,而是 ajax 处理程序可以检测到的其他内容,例如状态代码 401(未授权)
  • 以正确处理 401 代码(或您使用的任何代码)的方式配置 ajax 客户端,例如通过显示登录页面
于 2012-10-04T20:50:43.567 回答
0

我们通过将响应状态设置为来处理这种情况403。我们中的以下代码login.jsp可以解决问题:

<%
    response.setStatus(HttpServletResponse.SC_FORBIDDEN);
%>

缺点是,当您访问登录页面时,浏览器控制台会显示该login请求已返回403

完成此操作后,ajax 调用将失败并进入失败状态,您可以在其中检查状态,显示会话超时的消息。

于 2015-09-26T20:40:15.873 回答