一般来说我们的项目都有登录过滤器,一般请求足以搞定。但是AJAX却是例外的,所以解决方法是设置响应为session失效。

一共分为过滤器和页面JS两个部分的设置,先看过滤器的修改:

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;

import javax.servlet.http.HttpSession;

/**

* 登录过滤器

*  拥有Session是否失效和用户是否登录2个条件判断

*  如果是ajax请求则设置session超时

* @author Merlin.Ma

*

*/

public class LoginFilter implements Filter{

private String redirectUrl = "/login.html";

private String sessionKey = "userName";

@Override

public void destroy() {

}

@Override

public void doFilter(ServletRequest request, ServletResponse response,

FilterChain chain) throws IOException, ServletException {

HttpServletRequest req = (HttpServletRequest) request;

HttpServletResponse rep = (HttpServletResponse) response;

HttpSession session = req.getSession();

if( session == null || session.getAttribute(sessionKey) == null){

//如果判断是 AJAX 请求,直接设置为session超时

if( req.getHeader("x-requested-with") != null && req.getHeader("x-requested-with").equals("XMLHttpRequest") ) {

rep.setHeader("sessionstatus", "timeout");

} else {

rep.sendRedirect( req.getContextPath() + redirectUrl);

}

}else {

chain.doFilter(request, response);

}

}

@Override

public void init(FilterConfig filterConfig) throws ServletException {

String url = filterConfig.getInitParameter("redirectUrl");

String key = filterConfig.getInitParameter("sessionKey");

redirectUrl = url == null? redirectUrl:url;

sessionKey = key == null ? sessionKey : key ;

}

}

代码简单,就不过多进行注释了,现在看JS部分的代码。当然是基于jQuery的~~

//全局的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");

}

}

});

页面加载这段js代码,然后开始调用ajax。在不登陆或者session失效的情况下,可以看到页面跳转到登录页面。

ajaxsetup无效_Ajax请求session失效该如何解决相关推荐

  1. shiro处理ajax请求未登录,shiro处理ajax请求session失效跳转

    最近在学习shiro时遇到一个问题,在ajax请求时,若是session失效时,没法正确的跳转登陆页面.在以前的项目中处理的方法是经过自定义一个过滤器来处理,session失效时返回错误码来处理.但由 ...

  2. php ajax session失效,PHP中解决ajax请求session过期退出登录问题

    1.session过期,如果直接是url请求,或者用户在打开的系统页面中直接清除缓存及cookie信息,可直接在php的入口文件中调用以下封装的方法,进行session信息判断以及页面的跳转,如: i ...

  3. 关于ASp.net中的session失效问题的解决办法之一

    在Web.config中的sessionstate段中 加入cookieless="true".一般即可解决问题.

  4. iframe中请求页面而session失效时页面跳转问题

    访问相关jsp页面时,往往要先判断用户session是否失效,以便决定是继续业务,还是跳转到登录页面.这个事情我们通常是用过滤器来实现的.由过滤器判断session是否失效,由此来决定请求继续还是跳转 ...

  5. Ajax Session失效跳转登录页面的方法

    在Struts应用中,我们发出的请求都会经过 相应的拦截器进行相关处理,一般都会有一个用户登录拦截(Session失效拦截):一般请求的话,如果Session失效时,我们会跳到登录页面,可是如果我们采 ...

  6. html session 登录页面跳转页面跳转页面,session失效后跳转到登陆页面

    一.编写Filter拦截器类 package com.pv.utils; import java.io.IOException; import java.io.PrintWriter; import ...

  7. ajax访问遇到Session失效问题

    最近由于一个项目,模块切换为ajax请求数据,当Session失效后,ajax请求后没有返回值,只有响应的html:<html><script type='text/javascri ...

  8. php ajax session,Ajax处理用户session失效

    这次给大家带来Ajax处理用户session失效,Ajax处理用户session失效的注意事项有哪些,下面就是实战案例,一起来看一下. 在使用spingMVC的拦截器来处理用户session失效的问题 ...

  9. 同一个IP不同端口号使用session失效

    背景 我有两个工程projectA.projectB,projectA放在TomcatA中,projectB放在TomcatB中,TomcatA.TomcatB在一台server上.  工程都映射的根 ...

最新文章

  1. 【正则表达式】之Possessive Quantifiers
  2. Java 8状态更新
  3. 如何确认访客所在的国家
  4. 经典好文!java继承父类注解
  5. 应用题分析思路--关注点分离
  6. Mad Libs 游戏
  7. 一天搞懂深度学习—学习笔记3(RNN)
  8. 软考中级软件设计师教程(第5版)知识点笔记第一章计算机系统知识持续更新中...
  9. svn使用的代码审查工具_专家使用的五种代码审查技巧
  10. C#中check和uncheck
  11. R语言IBM股票月对数收益率的Egarch模型
  12. div中img居中显示
  13. 提神醒脑 MVP、MVVM 关系精讲
  14. python猜数字游戏实例_Python文曲星猜数字游戏实例代码教程
  15. PPT学习整理(五)编辑顶点
  16. 善于计划,善于总结,善于归纳
  17. v u e + ts excel表的导入解析转换 加下载excel表格式(个人笔记)
  18. 小程序如何cdn加速服务器,小程序游戏加速方案
  19. ueditor(vue-ueditor-wrap)集成秀米全过程以及遇到的问题
  20. 微信公众号扫一扫功能vue配置

热门文章

  1. vivado使用自带IP核和创建自己定义的IP核
  2. ADC和DAC常用技术术语
  3. Matlab中fft作频谱横纵坐标
  4. 高校复试计算机英语文献翻译,专业文献英语翻译复试.pdf
  5. 隔空操作之通过简单计算识别手的挥动反向
  6. Django实战之添加markdown编写文章的支持
  7. python中PIL模块
  8. BeX5报表开发中Excel格式修改的一个小问题
  9. commonrpc 1.0 发布,高性能分布式 RPC 框架
  10. 推荐给c++学习者的经典