我有一个Spring Web应用程序,并且使用Spring安全性进行了用户身份验证。
一切正常。登录和注销工作完美!
现在,我要实现以自动注销。例如,如果用户打开了一个窗口约30分钟,但不执行任何操作(例如,会话已过期),则系统应自动注销。我该如何实施?
它可能由客户端实现(我每1分钟发送一次请求,并检查会话是否结束)。但是我不能从Spring自动做到吗?
我有这个配置:
<http auto-config="true" use-expressions="true"> <intercept-url pattern="/admin**" /> <access-denied-handler error-page="/403" /> <form-login login-page="/login" default-target-url="/admin" authentication-failure-url="/login?error" username-parameter="NAME" password-parameter="PASSWORD" /> <logout invalidate-session="true" logout-success-url="/login?logout"/> </http>
并在web.xml中
<session-config> <session-timeout>1</session-timeout> </session-config>
1分钟后,我看到该会话已被破坏。1分钟后终止会话。但是页面没有重定向到/ login?logout
如何使用安全配置。我希望下面的配置:将工作。
applicationContext.xml
--namespace-> xmlns:security="http://www.springframework.org/schema/security" <security:logout invalidate-session="true" success-handler-ref="Logout" logout-url="/logout.html" /> </security:http>
web.xml
<session-config> <session-timeout> 30 </session-timeout> </session-config>
而他们,您需要编写自己的,因为success-handler-ref =“ Logout”是用于注销的自定义处理程序: Logout @Component
public class Logout extends SimpleUrlLogoutSuccessHandler { @Override public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException { if (authentication != null) { // do something } setDefaultTargetUrl("/login"); super.onLogoutSuccess(request, response, authentication); } }