`
zhuchengzzcc
  • 浏览: 442549 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Session超时 Ajax请求页面的跳转

    博客分类:
  • java
 
阅读更多

      当session超时时,如果不是ajax请求,很简单就能实现跳到指定的页面;但是ajax请求就会有问题:如果是ajax类型的弹出框则会在弹出框中显示跳转的指定页面,如果是正常ajax请求,则可能会显示源代码等。

 

      我们需要做的是通过一个过滤器,判断是否是超时的ajax的请求进行一些特殊的处理。

 

package org.zhuc.common.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;

import org.apache.shiro.SecurityUtils;

/**
 * @author zhuc
 * @version 2013-3-16 下午5:51:00
 */
public class SessionFilter implements Filter {

	@Override
	public void init(FilterConfig filterConfig) throws ServletException {

	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
			ServletException {
		HttpServletRequest httpServletRequest = (HttpServletRequest) request;
		HttpServletResponse httpServletResponse = (HttpServletResponse) response;
		//		if (httpServletRequest.getSession().getAttribute("user") == null) {
		if (!SecurityUtils.getSubject().isAuthenticated()) {
			//判断session里是否有用户信息
			if (httpServletRequest.getHeader("x-requested-with") != null
					&& httpServletRequest.getHeader("x-requested-with").equalsIgnoreCase("XMLHttpRequest")) {
				//如果是ajax请求响应头会有,x-requested-with
				httpServletResponse.setHeader("sessionstatus", "timeout");//在响应头设置session状态
				return;
			}

		}

		chain.doFilter(request, response);
	}

	@Override
	public void destroy() {

	}

}

 

这样,如果session超时,而且是ajax请求,就会在响应头里,sessionstatus有一个timeout;

这个过滤器的位置在web.xml中一般来说应该是位于最下面的,它是该最后执行的过滤器。

 

再用一个全局的方法来处理,session超时要跳转的页面。

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

	//全局的ajax访问,处理ajax清求时sesion超时
	$.ajaxSetup({
		contentType:"application/x-www-form-urlencoded;charset=utf-8",
		complete:function(XMLHttpRequest,textStatus){
			//通过XMLHttpRequest取得响应头,sessionstatus,
			var sessionstatus=XMLHttpRequest.getResponseHeader("sessionstatus"); 
			if(sessionstatus=="timeout"){
			//如果超时就处理 ,指定要跳转的页面
				window.location = "<c:url value="/" />";
			}
		}
	});

 

这里让他自动跳转  /    下,即web项目根目录,通过其他权限过滤器自然就会跳转到指定页面了。

分享到:
评论
4 楼 tk752178927 2017-11-17  
一派胡言
3 楼 wenm168 2016-12-27  
ajax请求session过期的简单实现方法:http://www.anyrt.com/blog/list/ajaxsession.html
2 楼 sbwfgihc 2015-12-29  
castte 写道
我试了一下,有问题,不知道lz怎么处理的:

这个filter如果放在shiro后面,请求会被shiro转发到登录页面
如果放在shiro前面就取不到SecurityUtils.getSubject()


用shiro如何解决session超时的问题的呢~~
1 楼 castte 2013-07-19  
我试了一下,有问题,不知道lz怎么处理的:

这个filter如果放在shiro后面,请求会被shiro转发到登录页面
如果放在shiro前面就取不到SecurityUtils.getSubject()

相关推荐

    完美解决ajax访问遇到Session失效的问题

    现在Ajax在Web项目中应用广泛,几乎可以说无处不在,这就带来另外一个问题:当Ajax请求遇到Session超时,应该怎么办? 显而易见,传统的页面跳转在此已经不适用,因为Ajax请求是XMLHTTPRequest对象发起的而不

    重写 ajax 实现 session 超时跳转到登录页面实例代码

    后端过滤器负责检测并处理Session超时,前端通过监听Ajax错误事件,捕获302状态码并模拟页面跳转,确保无论用户是通过常规链接还是Ajax请求,一旦Session超时都能被正确引导到登录页面。这种做法不仅维护了用户操作...

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

    总结来说,处理AJAX请求时的Session超时问题,主要分为两步:一是服务器端检测并标记Session超时,二是客户端监听响应并根据标记进行页面跳转。这种方法可以确保无论用户何时何地发起AJAX请求,一旦Session超时,都...

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

    总结来说,实现Webix+Spring MVC环境下Session超时跳转登录页面的关键在于,前端扩展Webix的Ajax请求处理,添加对Session超时的检查,并在检测到超时后使用JavaScript进行页面重定向;后端则需在Spring MVC的拦截器...

    ext session失效 页面跳转

    当Session超时,服务器会清除相关的Session数据,并在后续的请求中告知EXT前端。 此外,为了提供更好的用户体验,一些应用会选择在Session即将到期时提醒用户,而不是突然跳转到登录页。这可以通过在后台定期发送...

    Web 开发中Ajax的Session 超时处理方法

    总结来说,处理Ajax请求中的Session超时问题,需要服务器端能够识别并标记超时的Ajax请求,同时客户端需要能够正确响应并处理这些标记。这样的设计既保持了用户体验的连续性,又确保了系统的安全性。在实际项目中,...

    Javaweb项目session超时解决方案

    解决Session超时的问题,需要对所有的/web/请求进行登录拦截,Session超时时跳转到登录页面。可以通过配置Session超时时间来实现这一点。在项目的web.xml中可以进行配置,如下: &lt;!-- 设置Session超时时间 --&gt; ...

    Session过期后自动跳转到登录页面的实例代码

    如果Session已经过期,我们可以设置响应的状态,对于Ajax请求,可以设置超时状态;对于普通页面请求,可以返回一个提示信息,并重定向到登录页面。例如: ```java public class SessionFilter implements Filter { ...

    ajax请求Session失效问题

    现在Ajax在Web项目中应用广泛,几乎可以说无处不在,这就带来另外一个问题:当Ajax请求遇到Session超时,应该怎么办? 显而易见,传统的页面跳转在此已经不适用,因为Ajax请求是XMLHTTPRequest对象

    跨域共享session (实现http跳转https 共享session)

    3. **定期刷新session**:设置合理的session超时时间,并在用户活动时更新session的最后活跃时间,提高安全性。 综上所述,跨域共享session涉及到多个技术层面,包括浏览器限制、服务器配置、前端处理和安全措施。...

    登录超时给出提示跳到登录页面(ajax、导入、导出)

    本文将详细介绍如何实现登录超时后给出提示并跳转到登录页面,主要涉及Ajax提交、过滤器(Filter)以及数据导入导出等相关技术。 一、登录超时验证过滤器 在Java Web应用中,我们可以使用Servlet的Filter接口来...

    thinkphp5.0-php登录超时检测功能的类

    每次用户请求页面时,服务器会检查这个Session ID来识别用户的身份。当设置的超时时间内没有新的请求,服务器则认为用户已经离线,清除其Session数据,实现自动登出。 在ThinkPHP5.0框架中,我们可以利用内置的...

    Asp.net 中mvc 实现超时弹窗后跳转功能

    在这个版本中,对于AJAX请求,我们将返回一个包含`logoff`标志和`logurl`属性的对象,前端接收到这些数据后可以自己决定如何处理登录超时的情况,比如显示一个模态框或者直接跳转。 总的来说,Asp.net MVC中实现...

    day18 监听器 统计在线人数,定时销毁超时session,钝化活化session,在线列表显示和踢人功能防止用户自动登录,在线支付

    在用户请求每个页面之前,检查其session是否有效,无效则跳转到登录页面。对于可能存在的并发登录问题,可以通过记录用户的登录状态,一旦检测到新的登录尝试,就强制登出旧的会话。 最后,关于在线支付,这是一个...

    Extjs 4.1 (MVC) 如何动态加载控制层以及session 过期该如何处理

    当检测到`sessionstatus`为"timeout"时,显示提示信息并重定向用户到登录页面: ```javascript Ext.Ajax.on('requestcomplete', checkSessionStatus, this); function checkSessionStatus(conn, response, options...

    AJAX跳转路径代码

    当ajax返回的时候,就是 代码如下: sucess:function()... 您可能感兴趣的文章:ajax动态为a标签href赋值不执行跳转的原因分析及解决ajax提交session超时跳转页面使用全局的方法来处理ajax如何实现页面局部跳转与结果返回

Global site tag (gtag.js) - Google Analytics