1、web.xml
<!-- 設定session過期 -->
<session-config>
<session-timeout>100</session-timeout>
</session-config>
<filter>
<filter-name>sessionFilter</filter-name>
<filter-class>com.moofen.student.ume.controller.SessionFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>sessionFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
2、過濾器
package com.moofen.cube.controller.ume.login;
import java.io.IOException;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.filter.OncePerRequestFilter;
import com.moofen.core.constant.SessionConstant;
public class SessionFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
// 不過濾的uri
String[] notFilter = new String[] { "login", "cube_resetpw", "updatePassword", "cube_editpw", "timeout", "frameworks", "assets" };
// 請求的uri
String uri = request.getRequestURI();
// 是否過濾
boolean doFilter = true;
for (String s : notFilter) {
if (uri.indexOf(s) != -1) {
// 如果uri中包含不過濾的uri,則不進行過濾
doFilter = false;
break;
}
}
String type = request.getHeader("X-Requested-With");
if (doFilter) {
// 執行過濾
// 從session中擷取登入者實體
Object obj = request.getSession().getAttribute(SessionConstant.USER_CODE);
if (null == obj) {
//如果是ajax請求,向前台js傳回一個狀态
if("XMLHttpRequest".equalsIgnoreCase(type)){
response.setHeader("sessionstatus", "timeout");
}else{//否則跳轉到登入頁面
String loginUrl = request.getContextPath() + "/login.html";
response.sendRedirect(loginUrl);
}
} else {
// 如果session中存在登入者實體,則繼續
filterChain.doFilter(request, response);
}
} else {
// 如果不執行過濾,則繼續
filterChain.doFilter(request, response);
}
}
}
3、js
//全局的ajax通路,處理ajax清求時sesion逾時
$.ajaxSetup({
contentType : "application/x-www-form-urlencoded;charset=utf-8",
complete : function(XMLHttpRequest, textStatus) {
var sessionstatus = XMLHttpRequest.getResponseHeader("sessionstatus"); // 通過XMLHttpRequest取得響應頭,sessionstatus,
if (sessionstatus == "timeout") {
// 如果逾時就處理 ,指定要跳轉的頁面
window.location.replace("../login.html");
}
}
});