session过期登录跳转问题:

1、设置session过期时间:

(1)tomcat配置文件web.xml下设置(30分钟)
<session-config>
  <session-timeout>30</session-timeout>
</session-config>
(2)工程web.xml下设置(15分钟)
<session-config>
    <session-timeout>15</session-timeout>
</session-config>
(3)代码
session.setMaxInactiveInterval(30*60);//以秒为单位,即在没有活动30分钟后,session将失效

2、登录时在登录的controller中记录用户名密码

request.getSession().setAttribute(USERNAME, “admin”);

3、判断session是否失效

web.xml中设置拦截器
<filter>
		<filter-name>core-performance</filter-name>
		<filter-class>
		    com.platform.framework.web.performance.filter.PerformanceMonitorFilter
		</filter-class>
		<init-param>
		<param-name>threshold</param-name>
		<param-value>1000</param-value>
		</init-param>
</filter>

PerformanceMonitorFilter.java

import java.io.IOException;
import java.util.List;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;


public class PermissionFilter implements Filter {
	private static final String USERNAME = "admin";
	private final static String LOGIN_URL = "/login.html";
	private final static String NO_PERMISSION_URL = "/noPermission.html";

	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		//初始化参数
	}

	@Override
	public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {
		
			if(request.getSession().getAttribute(USERNAME) == null);{
			    //session过期处理
			    sendRedirectIncludeAjax();
			    return;
			}
			else//未过期跳转到下一个拦截器
			    chain.doFilter(request, response);

	}

	private void sendRedirectIncludeAjax(HttpServletRequest request, HttpServletResponse response) throws IOException {
		if ("XMLHttpRequest".equalsIgnoreCase(((HttpServletRequest) request).getHeader("X-Requested-With"))) {//ajax请求为异步
			response.setHeader("sessionStatus", "timeout");  
			return;
		} else {
			response.sendRedirect(LOGIN_URL);//同步请求,直接跳转到登录页面
			return;
		}
	}

	@Override
	public void destroy() {

	}

}

4、异步ajax操作--session过期处理

/**
 * 设置AJAX请求遇到Session过期时处理动作(对所有ajax设置全局参数,即所有ajax请求都会执行此操作)
 */
$.ajaxSetup({
    complete: function(xhr,status) {
        var sessionStatus = xhr.getResponseHeader('sessionStatus');
        if(sessionStatus == 'timeout') {
            var top = getTopWinow();
            var yes = confirm('由于您长时间没有操作, session已过期, 请重新登录');
            if (yes) {
                top.location.href = '/login.html';            
            }
        }
    }
});