过滤器面对ajax访问遇到Session失效问题

本文探讨了在Ajax广泛应用的背景下,如何处理Session超时问题。通过Java过滤器判断HTTP请求中的X-Requested-With头信息,利用JavaScript进行页面跳转。提供了一个Java过滤器的代码示例和使用$.ajaxSetup()进行全局设置的方法,同时提到了EasyUI的相关补充。
摘要由CSDN通过智能技术生成
       项目要添加过滤未登录用户跳转到登录页面,对于普通页面来说 response.sendRedirect( "/login.action");  完全没问题,但是在使用ajax的时候往往得不到想要的效果。因为页面根本没跳转,只是捕获到了登录页面的源码而已。

现在Ajax在Web项目中应用广泛,几乎可以说无处不在,当Ajax请求遇到Session超时,应该怎么办?

显而易见,传统的页面跳转在此已经不适用,因为Ajax请求是XMLHTTPRequest对象发起的而不是浏览器,在验证失败后的页面跳转无法反应到浏览器中,因为服务器返回(或输出)的信息被JavaScript(XMLHTTPRequest对象)接到了。

那么应该怎么处理这种情况呢?

 

方法

既然服务器返回的消息被XMLHTTPRequest对象接收,而XMLHTTPRequest对象又是在JavaScript的掌控之中,那么我们是否可以利用JavaScript来完成页面跳转呢?

当然可以,而且很容易实现!但有一点,我们需要判断一下HTTP请求是否为Ajax请求(因为AJAX请求和普通的请求需要分开处理),这又如何判断呢?其实Ajax请求和普通的HTTP请求是不同的,这体现在HTTP请求的头信息中,AJAX请求头中带有X-Requested-With信息,其值为XMLHttpRequest,这正是我们可以利用的地方。

Java过滤器代码

public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
			FilterChain filterChain)throws ServletException, IOException {
		
		HttpServletRequest request = (HttpServletRequest)servletRequest;
		HttpServletResponse response = (HttpServletResponse)servletResponse;
		
		String urlParameter = request.getQueryString();
		String urlParam = "";
		if (urlParameter!=null) {
			String[] array = urlParameter.split("=");
			if (array.length>1) {
				urlParam = array[1];
				if(urlParam.split("&").length>1){
					urlParam = urlParam.split("&")[0];
				}
			}
		}else {
			// 对于错误的url及直接输入jsp的url  urlParam默认为“”
		}
		HttpSession session = request.getSession(false);
		if("index".equals(urlParam) || "login".equals(urlParam)){
			//这里表示如果当前页面是登陆入口页面或登录
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值