`
ronon
  • 浏览: 187065 次
  • 性别: Icon_minigender_2
  • 来自: 武汉
社区版块
存档分类
最新评论

Struts2 在登录拦截器中对ajax请求的处理

 
阅读更多

前言:

由于ajax请求不像http请求,可以直接进行页面跳转,你返回的所有东西,ajax都只会识别为一个字符串。

 

之前尝试的方法是在拦截器中返回一个标识给ajax,然后再在每一个ajax请求成功之后根据标识“isNotLogin”进行页面的跳转,但是这样也很麻烦,每一个ajax请求之后,都需要写一句if(returnStr=="isNotLogin"){ window.location.href="xxxxxx" }

 

查了资料,试了一下ajaxSetup方法,可以给所有的ajax请求设置初始化,个人觉得就类似一个ajax拦截器吧,虽然也需要在每一个需要使用的jsp中进行引用,不过已经方便很多了,减少了重复代码

 

1.struts.xml

 

之前贴过,就不再贴了

 

2.Interception的doIntercept方法中的关键代码

//ajax请求的处理
if (request.getHeader("X-Requested-With") != null && request.getHeader("X-Requested-With").equalsIgnoreCase("XMLHttpRequest"))
{
	PrintWriter out = response.getWriter(); 
	out.print("isNotLogin");//返回一个标识给前端
	out.flush();
	out.close();
	return null;
}

//http请求的处理
else
{
	//直接跳转到登录页面
	return "login";
}

 

3.写一个单独的js文件,使用jQuery.ajaxSetup() 方法设置全局 AJAX 默认选项,捕获刚刚在拦截器里传递的值

 

$.ajaxSetup({  
    cache: false, //关闭ajax缓存
    contentType:"application/x-www-form-urlencoded;charset=utf-8",   
    //complete:表示完成请求后触发。即在success或error触发后触发。也有success: 和 error: 等参数,根据需要来
    complete:function(XHR,textStatus){ 
    	var resText = XHR.responseText; 
    	/*根据拦截器传递的标识,进行相关操作*/
    	//isNotLogin标识用户当前未登录,需要将页面转到登录页面
        if(resText=='isNotLogin'){  
        	window.location=basePath+"/web/tologin.html";
        }  
        //isCookieLogin标识当前用户可使用cookie信息进行自动登录
        else if(resText=='isCookieLogin'){   

        }          
    }   
}); 

20150708补充

由于$.ajaxSetup级别太高,考虑到只是在请求成功后执行此操作,使用ajaxSuccess更符合需要。

!!!一定要注意ajaxSuccess的执行时机-->

ajaxSuccess只会在 

success: function(data) {
……
}

success后的函数内容全部执行完毕后才会触发。

因此假如本来某个ajax请求的预期返回结果是一个json字符串,但是,如果该请求被拦截器拦截掉了,

且拦截器返回了一个"isNotLogin",很明显不是json格式,那么很有可能后面的js就会出错,js出错就会导致程序中断。这种情况目前还没找到一劳永逸的解决办法,能想到的是可以在前台得到返回值之后进行数据格式的判断或者写try-catch,我使用的是第二种,这样子如果js出错了程序还能继续走,走到ajaxSuccess,相应的页面跳转才能成功完成。

 

公共的js登录拦截器代码如下:

 

//当页面中所有ajax请求成功时执行下面的代码
$(document).ajaxSuccess(function (event,xhr,settings){
	/*
	event:触发的事件对象
	xhr:XMLHttpRequest对象
	settings:可以获取当前ajax请求中的参数,
	例如setting.url表示请求的url地址,
	可以以此来过滤指定的ajax请求
	*/
	//alert("ajaxSuccess:"+settings.url);
	var resText = xhr.responseText; 
	
	/*根据拦截器传递的标识,进行相关操作 */
	//isNotLogin标识用户当前未登录,需要将页面转到登录页面
    if(resText=="isNotLogin"){  
    	window.location=basePath+"/web/register_toLogin.html";
    }  
    //isCookieLogin标识当前用户可使用cookie信息进行自动登录
    else if(resText=="isCookieLogin"){   

    } 
   
});
 

 

顺便贴一下几个全局 Ajax 事件处理器的执行顺序:



 



 

关于ajax请求的详细说明的链接:

http://www.cnblogs.com/heyuquan/archive/2013/05/13/js-jquery-ajax.html

 

4.将上面的js文件在每一个需要判断是否登录的jsp中进行引用,即可

  • 大小: 54.1 KB
  • 大小: 51.8 KB
分享到:
评论

相关推荐

    ajax请求拦截器

    struts2在struts2.xml里配置拦截器可以过滤到指定的url的请求,但是对于ajax的请求确是过滤不了,比如说sesion超时或某些页面有权限控制的,通过ajax的请求时系统会报错最近在解决此类问题时碰上了找了不少资料,...

    Struts2 in action中文版

    9.1 为什么在Struts 2中使用Spring 196 9.1.1 依赖注入能做些什么 197 9.1.2 Spring如何管理对象和注入依赖 199 9.1.3 使用接口隐藏实现 200 9.2 将Spring添加到Struts 2 202 9.2.1 让Spring管理动作、拦截器和结果...

    struts2.0.jar

    Struts 2.0框架中出现的许多特性旨在让Struts更容易使用: · 改进的设计: 与Struts 1相比,...· 易于定制的控制器: Struts 1允许请求处理程序可按照模块来定制,在Struts 2中,需要的话,可以按照动作来定制请求处理

    STRUTS+AJAX+JSP 请求到后台乱码问题解决方法

    在AJAX请求URL之前 把参数进行encodeURI()转码。 如: 代码如下: var fileName=... 您可能感兴趣的文章:JSP struts2 url传参中文乱码解决办法JSP 开发之Struts2内建自定义拦截器java+jsp+struts2实现发送邮件功

    深入浅出Struts 2 .pdf(原书扫描版) part 1

    书中介绍了如何利用Struts 2 来解决Web 应用开发中的常见问题,同时还深入浅出地探讨了许多能帮助程序员编写Struts 2 应用程序的技巧,如管理页面导航活动、输入验证、国际化和本地化、对Ajax 的支持,等等。书中...

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

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

    SpringMVC面试专题.pdf

    1、什么是 SpringMvc? 2、Spring MVC 的优点: 3、SpringMVC 工作原理? 4、SpringMVC 流程? 6、SpringMvc 的控制器是不是单例模式,如果是,有...22、SpringMvc 里面拦截器是怎么写的 23、讲下 SpringMvc 的执行流程

    Java Web程序设计教程

    第7章 struts2中应用模板语言 145 7.1模板语言简介 145 7.2应用velocity 146 7.2.1velocity基础 146 7.2.2struts2对velocity的支持 153 7.3应用freemarker 155 7.3.1freemarker基础 155 7.3.2struts2整合...

    达内Java培训项目(当当网/通用电子商务系统)

    使用拦截器机制来限制未登录用户对购买、结算等Action的访问,保证了系统的健壮性。 对分页进行了组建化封装,提高了系统的通用性。 层与层之间采用接口连接,面向接口编程使得系统结构良好。 经验总结: 通过该...

    Spring in Action(第二版 中文高清版).part2

    12.1.3 在Spring 2中注入JNDI对象 12.2 发送电子邮件 12.2.1 配置邮件发送器 12.2.2 构建电子邮件 12.3 调度任务 12.3.1 使用Java Timer调度任务 12.3.2 使用Quartz调度器 12.3.3 按调度计划调用方法 ...

    J2EE应用开发详解

    124 8.5.2 拦截器的实现原理 124 8.5.3 Struts2的内置拦截器 124 8.5.4 拦截器的配置和使用 125 8.5.5 自定义拦截器 126 8.6 一个简单的Struts2应用 130 8.7 小结 140 第9章 JSF 141 9.1 JSF技术简介 141 9.1.1 JSF...

    Spring in Action(第二版 中文高清版).part1

    12.1.3 在Spring 2中注入JNDI对象 12.2 发送电子邮件 12.2.1 配置邮件发送器 12.2.2 构建电子邮件 12.3 调度任务 12.3.1 使用Java Timer调度任务 12.3.2 使用Quartz调度器 12.3.3 按调度计划调用方法 ...

    Spring in Action(第2版)中文版

    12.1.3在spring2中注入jndi对象 12.2发送电子邮件 12.2.1配置邮件发送器 12.2.2构建电子邮件 12.3调度任务 12.3.1使用javatimer调度任务 12.3.2使用quartz调度器 12.3.3按调度计划调用方法 12.4使用jmx管理...

    Java学习笔记-个人整理的

    \contentsline {chapter}{Contents}{2}{section*.1} {1}Java基础}{17}{chapter.1} {1.1}基本语法}{17}{section.1.1} {1.2}数字表达方式}{17}{section.1.2} {1.3}补码}{19}{section.1.3} {1.3.1}总结}{23}{...

    JAVA WEB典型模块与项目实战大全

    第22章 用户登录模块(struts 2.x+guice+国际化)  22.1 用户登录概述  22.2 关于用户登录的基础知识——国际化资源  22.3 关于用户登录的基础知识——guice框架  22.4 用户登录的具体实现  22.5 小结  ...

Global site tag (gtag.js) - Google Analytics