zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    1130
    Oracle 数据库常用操作语句大全
    Oracle用sys登陆报:ORA-28009:connection as sys should be as sysdba
    导出数据报ORA-39002: 操作无效 ORA-39070: 无法打开日志文件。 ORA-39087: 目录名 DUMP_DIR 无效
    SGI STL源码stl_bvector.h分析
    SGI STL源码stl_vector.h分析
    CGI 萃取技术 __type_traits
    迭代器iterator和traits编程技法
    智能指针分析及auto_ptr源码
    C++深拷贝和浅拷贝细节理解
  • 原文地址:https://www.cnblogs.com/cxyj/p/3884964.html
Copyright © 2011-2022 走看看