天天看點

session過期 ajax請求跳轉登入頁面

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