Java 2种方法实现简单的session超时登出
Posted 青山与妙高
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 2种方法实现简单的session超时登出相关的知识,希望对你有一定的参考价值。
1、使用拦截器
用户每次和后台交互,如果用户长时间未操作,则需要检测用户的登录状态,这样的场景已经是再正常不过了。
传统的做法可以在每个controller里先判断user的状态,然后再执行业务操作,但这样比较代码不够精简,优雅。
可以使用最简单的拦截器,如:
public class LoginInterceptor extends HandlerInterceptorAdapter { private List<String> IGNORE_URI; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { HttpSession session = request.getSession(); if(session != null && session.getAttribute("login_status") != null){ return true; }else{ response.sendRedirect("/user/login?timeout=true"); return false; } } public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { super.postHandle(request, response, handler, modelAndView); }
public List<String> getIGNORE_URI() {
return IGNORE_URI;
}
public void setIGNORE_URI(List<String> IGNORE_URI) {
this.IGNORE_URI = IGNORE_URI;
}
}
只要我们在登录的时候给session设个值,每次进入方法的时候,都先会执行拦截器中的preHandle()方法,如果session已经失效则重定向到登录页面。
spring-mvc.xml的配置:
<mvc:interceptors> <!-- 登陆拦截器,负责拦截未登录的操作 --> <mvc:interceptor> <!-- 需要拦截的地址 --> <mvc:mapping path="/**"/> <!-- 需要排除拦截的地址 --> <mvc:exclude-mapping path="/static/**"/> <bean id="loginInterceptor" class="com.amayadream.webchat.interceptor.LoginInterceptor"> <property name="IGNORE_URI"> <list> <value>/user/login</value> <value>/user/logout</value> </list> </property> </bean> </mvc:interceptor> </mvc:interceptors>
2、使用Shiro的session会话管理
具体的使用可以看我的另一篇博客:https://www.cnblogs.com/qsymg/p/9836122.html
以上是关于Java 2种方法实现简单的session超时登出的主要内容,如果未能解决你的问题,请参考以下文章