关闭

Session超时或无效,处理ajax请求

标签: sessionspring mvcajax
1307人阅读 评论(0) 收藏 举报
分类:
       项目使用的是spring-security安全框架,当session超时时,如果不是ajax请求,很简单就能实现跳到指定的页面。但是ajax请求就会有问题。session超时的时候,点击到ajax请求就会弹出一些页面源码文件。

       由于一直都在忙其他的这个问题一直放着。最近有时间了,就把这个问题给解决了。

       首先建了个拦截器,来判断session超时。用户登录后会保存用户信息在一个session里,在session的监听里,session超时会销毁保存在session里的用户信息,而拦截器就通过session里是否有用户信息来判断session超时。此时需要注意登陆的时候将用户信息写入session,超时需要在监听器中将session销毁(我总觉得这种方法不怎么好。不知还有什么更好的办法。)

       拦截器是spring-mvc的拦截器,在拦截器里判断是不是ajax请求:

package org.nercita.bcp.system.util;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

public class CustomSessionHandlerInterceptor implements HandlerInterceptor {

	@Override
	public boolean preHandle(HttpServletRequest request,
            HttpServletResponse response, Object handler) throws Exception
            
    {
	//	System.out.println(LogInfoService.getLoginUserName());
	//	System.out.println(request.getSession().getAttribute("SPRING_SECURITY_CONTEXT"));
		if (request.getHeader("x-requested-with") != null
                    && request.getHeader("x-requested-with")
                    .equalsIgnoreCase("XMLHttpRequest")){//如果是ajax请求响应头会有,x-requested-with;
            
			if (request.getSession().getAttribute("user") == null){//判断session里是否有用户信息
				
                            response.setHeader("sessionstatus", "timeout");//在响应头设置session状态
                            return false;
                         }
            
                }
                return true;
    }

	@Override
	public void postHandle(HttpServletRequest request,
			HttpServletResponse response, Object handler,
			ModelAndView modelAndView) throws Exception {     
		
	}

	@Override
	public void afterCompletion(HttpServletRequest request,
			HttpServletResponse response, Object handler, Exception ex)
			throws Exception {
		
	}

}



       这样,如果session超时,而且是ajax请求,就会在响应头里,sessionstatus有一个timeout;再用一个全局的方法来处理,session超时要跳转的页面。

jquery 可以用$.ajaxSetup 方法,ext也有类似的方法

 //全局的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("${ctx}/login.jsp"); 
             } 
               
     } 
  });

   

 

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

在Ajax请求中处理登录session超时的方法

问题描述     在web应用中使用jquery进行ajax请求,有些ajax请求必须是登录后或者通过认证授权后才可以访问的,而这些认证授权以及登录拦截通常在系统中都会使用filter或者inter...
  • CrazyCoder2010
  • CrazyCoder2010
  • 2016-08-09 14:45
  • 1762

ajax超时跳转到登陆页面

adf
  • zhao1949
  • zhao1949
  • 2014-11-14 13:44
  • 1138

Ajax请求,登录超时,如何跳转到登录页面

对于普通的http请求,请求服务器,session超时的情况下,页面会自动跳转到登录页面。 但是对于Ajax请求,页面还是当前页面,不会跳转到登录页面。 看到网上很多方法,但是都不通用,下面是...
  • abc5232033
  • abc5232033
  • 2017-07-18 23:11
  • 711

session超时,处理ajax请求

项目使用的是spring-security安全框架,当session超时时,如果不是ajax请求,很简单就能实现跳到指定的页面。但是ajax请求就会有问题。session超时的时候,点击到ajax请求...
  • ZuxiangHuang
  • ZuxiangHuang
  • 2012-02-18 20:24
  • 13096

Session超时的三种配置

在Java Web开发中,Session为我们提供了很多方便,Session是由浏览器和服务器之间维护的。Session超时理解为:浏览器和服务器之间创建了一个Session,由于客户端长时间(休眠时...
  • xwq2324
  • xwq2324
  • 2016-06-28 15:38
  • 1390

session超时问题

在做系统的时候,如果我长时间没有去理会他的话,就会遇到一个问题,就是session超时的问题。造成这个问题原因就是:用户登录时间过长,没有进行操作。进而造成了session的超时之后自行销毁。所以如果...
  • u010196821
  • u010196821
  • 2015-02-27 15:39
  • 2931

Session超时后的事件监听处理

当session会话超时后,如果xu 1、创建UserSessionListener
  • vincent50411
  • vincent50411
  • 2014-09-24 16:28
  • 1830

JavaWeb用户Session超时解决方案

JavaWeb用户Session超时解决方案。
  • u012383839
  • u012383839
  • 2016-12-18 13:47
  • 4051

Java设置session超时(失效)的时间

Java设置session超时(失效)的时间 http://www.cnblogs.com/diewufeixian/p/4221747.html posted @ 2015-01-13 16:4...
  • jackpk
  • jackpk
  • 2016-10-27 18:37
  • 1133

彻底解决session设置timeout不起作用、自动失效的方法

[转帖]彻底解决session设置timeout不起作用、自动失效的方法 系统运行环境:win2003+iis6.0+asp做了多次测试,居然不好用,这是为什么呢,上网找了许多资料,但是都属于sess...
  • yangfz8899
  • yangfz8899
  • 2011-04-20 21:47
  • 2202
    个人资料
    • 访问:1494633次
    • 积分:17120
    • 等级:
    • 排名:第676名
    • 原创:155篇
    • 转载:913篇
    • 译文:34篇
    • 评论:212条
    文章分类
    最新评论