Spring Security 3.1 - 发生会话超时时自动重定向到登录页面

问题描述 投票:5回答:3

我有一个基于Spring的Web应用程序,我正在实现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>   
jquery html spring spring-security security
3个回答
1
投票

我认为你不需要自己动手,Spring几乎可以自己处理。这就是春天的伟大!


0
投票

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

  • 以一种方式配置spring安全性,它不会将http状态代码200(OK)重定向(303/307)发送到登录页面,而是由ajax处理程序检测到的其他内容,例如状态代码401(未授权)
  • 配置ajax客户端的方式是它处理401代码(或者你曾经使用过的)是正确的,例如通过在页面中显示日志

0
投票

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.