會話過期重新登錄


1.在前端接收request里返回的狀態碼進行判斷

tools.setAjaxGlobal = function () {
$(document).ajaxComplete(function (event, request, settings) {
if (settings.url && settings.url.indexOf("/logout") >= 0) {
return;
}
if (location.href.indexOf("/login") != -1) {
return;
}
if (!top.page.dialogExt) {
return;
}
if (request.status == 404) {
//將之前其他dialog彈出框,以及遮蓋刪除
top.page.warn("請求未找到!", "提示");
}
if (request.status == 403) {
/*操作權限不足*/
top.page.warn("操作權限不足!", "提示", function () {
top.page.doLogout(true);
});
}
if (request.status == 500) {
//系統異常
top.page.warn("系統異常!", "提示信息");
}
if (request.status == 800) {
//會話過期
top.page.warn("會話已過期,請重新登陸", "提示信息", function () {
top.page.doLogout(true);
});
}
if (request.status == 900) {
//會話過期
top.page.warn("該用戶已在其它地方登錄,請重新登錄", "提示信息", function () {
top.page.doLogout(true);
});
}
});
};

2.創建類SecurityInterceptor,繼承HandlerInterceptor(springMVC中的攔截器),在其中判斷超時

public class SecurityInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
/*該方法將在請求處理之前進行調用,只有該方法返回true,才會繼續執行后續的Interceptor和Controller,當返回值為true 時就會繼續調用下一個Interceptor的preHandle 方法,如果已經是最后一個Interceptor的時候就會是調用當前請求的Controller方法;
SysUser user = (SysUser) HttpUtils.getSession().getAttribute("userBean");
if (user != null) {
return true;
}
// 登錄超時返回800
response.setStatus(800);
return false;
}
  @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response,Object obj,Exception e)throws Exception {
  /*該方法也是需要當前對應的Interceptor的preHandle方法的返回值為true時才會執行,該方法將在整個請求結束之后,也就是在DispatcherServlet 渲染了對應的視圖之后執行。用於進行資源清理。*/
}
  @Override public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1,Object arg2,ModelAndView arg3) throws Exception {
  /*該方法將在請求處理之后,DispatcherServlet進行視圖返回渲染之前進行調用,可以在這個方法中對Controller 處理之后的ModelAndView 對象進行操作。
  }

}

3.配置攔截,addPathPatterns表示攔截哪些功能,excludePathPatterns表示不攔截哪些功能(比如登錄相關,驗證碼)

@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new SecurityInterceptor())
.addPathPatterns("/**")
.excludePathPatterns("/login/**");
}
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM