首页 > 代码库 > Ajax请求Session超时解决

Ajax请求Session超时解决

web前端js代码:

$.ajaxSetup({    contentType : "application/x-www-form-urlencoded;charset=utf-8",    complete : function(xhr, textStatus) {        if (xhr.status == 520) {//如果返回状态码是520            window.location..reload();//刷新页面,执行登录逻辑            return;        }    }});

java代码:

  1. 写一个filter

import java.io.IOException;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;public class SessionTimeoutFilter implements Filter {    public void destroy() {    }    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {        HttpServletRequest req = (HttpServletRequest) request;        HttpServletResponse res = (HttpServletResponse) response;        // 判断session里是否有用户信息        if (req.getSession().getAttribute("username") == null){            // 如果是ajax请求响应头会有,x-requested-with;            if (req.getHeader("x-requested-with") != null && req.getHeader("x-requested-with").equalsIgnoreCase("XMLHttpRequest")){                res.setStatus(520);//表示session timeout            }else{                chain.doFilter(req, res);            }        }else{            chain.doFilter(req, res);        }    }    public void init(FilterConfig chain) throws ServletException {    }}

  2. 在web.xml中添加上面的filter

<filter>    <filter-name>ajaxSessionTimeout</filter-name>    <filter-class>org.tshark.framework.web.filter.SessionTimeoutFilter</filter-class></filter><filter-mapping>    <filter-name>ajaxSessionTimeout</filter-name>    <url-pattern>/*</url-pattern></filter-mapping>