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>

Ajax请求Session超时解决

时间: 2024-10-12 20:28:31

Ajax请求Session超时解决的相关文章

ajax提交session超时跳转页面使用全局的方法来处理

来自:http://www.jb51.net/article/43770.htm 如果是ajax提交,超时时从服务器发出的跳转命令就不会起作用,所以如果是session超时,而且是在ajax请求,就在响应头里,再用一个全局的方法来处理session超时要跳转的页面. 在过滤器中写入如下方法:(未测试) public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws I

Shiro:ajax的session超时处理

本问题解决方案参照网站多篇文章融合解决,在此表示感谢! 环境:springboot+shiro+jquery-easyui 问题:在ajax请求时,如果此时session已经失效,系统没有自动跳转到登录页面.后来在服务端加了判断ajax请求的代码,结果还是没有用,无法取到ajax特定的head值(X-Requested-With).发现jquery-easyui表单提交时没有就没有传递这个值. 解决办法: 1.添加拦截器 import javax.servlet.ServletRequest;

AJAX请求Session的值为null

近来短信接口暴露被人跑了脚本(目前短信接口被攻击真是频繁,连360开发平台注册页面的短信都收不到了),为了解决此问题在短信请求之前加了图形验证码.这样接口就不放在前端(包括移动端)了. 于是就引出了上面的标题的问题. 之前查了一些资料,排除了所有代码问题,最终仍定为跨域问题. 跨域本是出于安全考虑:同源策略即JavaScript或者Cookie只能访问同域下的内容:也因为这个才会出现好多莫名其妙的问题. 提起跨域就能想到CORS(跨域资源共享,cross-origin resource shar

ajax请求session失效重定向到登录页面

在ajax请求的页面引入一个自定义的AjaxRedirect.js的文件 AjaxRedirect.js的代码如下: $(function(){ $.ajaxSetup({ type: 'POST', complete: function(xhr,status) { var sessionStatus = xhr.getResponseHeader('sessionstatus'); if(sessionStatus == 'timeout') { var top = getTopWinow()

ajax 请求登录超时跳转登录页解决方法

在Filter里判断是否登录,如果未登录返回401状态 public class SelfOnlyAttribute : ActionFilterAttribute { public override void OnActionExecuting(ActionExecutingContext filterContext) { HttpResponseBase response = filterContext.HttpContext.Response; HttpRequestBase reques

webix+springmvc session超时跳转登录页面

2016-10-30 13:11:56 引言 最近做项目,发现ajax请求不能在服务器中直接重定向到登录页面.查了些资料发现jquery的ajax请求有人给出了方法.但是webix的ajax请求和jquery的有些区别.这里模仿jquery的处理方式实现webix的ajax请求session超时跳转. 具体的做法: 1.查看webix.js源码发现webix.ajax只有请求前的监听函数 "onBeforeAjax", 要做到获取返回状态跳转登录页面必须要有个返回的监听函数,但是源码没

解决浏览器跨域限制发送ajax请求

一.什么是浏览器跨域限制?本质是什么? 所谓浏览器跨域限制,其实是为了数据安全的考虑由Netscape提出来限制浏览器跨域访问数据的策略,这是一中约定,正式叫法为浏览器同源策略,目前已经在大多数浏览器中支持. 本质上,所谓浏览器同源策略即:不允许浏览器访问跨域的Cookie,ajax请求跨域接口等.也就是说,凡是访问与自己不在相同域的数据或接口时,浏览器都是不允许的. 最常见的例子:对于前后端完全分离的Web项目,前端页面通过rest接口访问数据时,会出现如下问题: 不允许发送POST请求:在发

解决spring-security session超时 Ajax 请求没有重定向的问题

开始时, 代码是这样的: $.ajax({ type : "POST", url : sSource, cache : false, dataType : "json", data : aoData, success : function(resp) { alert(11) fnCallback(resp); $.dialog.tips('数据加载完毕', 1, 'success.gif', function() { }); } }); spring-securit

spring mvc session超时,处理ajax请求

做web开发时,当session超时时,如果不是ajax请求,很简单就能实现跳到指定的页面.但是ajax请求就会有问题.session超时的时候,点击到ajax请求就会弹出一些页面源码文件. 首先建了个拦截器,来判断session超时.用户登录后会保存用户信息在一个session里,在session的监听里,session超时会销毁保存在session里的用户信息,而拦截器就通过session里是否有用户信息来判断session超时. 拦截器是spring-mvc的拦截器,在拦截器里判断是不是a