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");
}
}
});