Java 2種方法實現簡單的session超時登出
阿新 • • 發佈:2018-11-02
1、使用攔截器
使用者每次和後臺互動,如果使用者長時間未操作,則需要檢測使用者的登入狀態,這樣的場景已經是再正常不過了。
傳統的做法可以在每個controller裡先判斷user的狀態,然後再執行業務操作,但這樣比較程式碼不夠精簡,優雅。
可以使用最簡單的攔截器,如:
public class LoginInterceptor extends HandlerInterceptorAdapter { private List<String> IGNORE_URI; @Overridepublic 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