struts2中拦截AJAX请求,判断SESSION为空跳转到登录页面
参考
http://endual.iteye.com/blog/1620368首先介绍情况:我们项目用STRUTS2+jquery easyui形式,发现在登录超时后,easyui的datagrid总显示为空(其实后台数据库是有数据的),但是又没有任何提示(我知道可以用类似 暂无数据 这样的方法来处理,但是实际上后台是有数据的,这样提示是不合理不真实的),我想要的是发现登录超时后,直接提示登录超时,然后跳转到登录页面。
方法有二:
方法一:在每个ACTION中进行判断处理,然后页面前台接收,并进行跳转到登录页面处理,缺点:每个类和前台每个页面都要写代码,麻烦
后台action处理:
BtUser user=getSessionUser("loginUser");
if(null==user){
String errStr="{\"msgtitle\":\"登录超时\",\"msgtype\":\"error\",\"msginfo\":\"登录超时请重新登录!\",\"msgsta\":2,\"total\":0,\"rows\":[]}";
System.out.println(errStr);
printJsonStr(errStr);
}else{
正常业务处理
}
然后在前台页面上,在datagrid的onLoadSuccess事件中进行处理,片断如下
onLoadSuccess:function(data){
var result = eval(data);
if(result.total==0 && result.msgType=="error"){
$.messager.alert(result.msgTitle,result.msgInfo,result.msgType);
top.location.href="user_login.jsp";
}
},
方法二:利用struts2的拦截器进行处理,
public class LoginCheckInterceptor extends MethodFilterInterceptor {
/**
* 是否为AJAX请求
*/
public boolean isAjaxRequest(HttpServletRequest request) {
String header = request.getHeader("X-Requested-With");
if (header != null && "XMLHttpRequest".equals(header))
return true;
else
return false;
}
protected String doIntercept(ActionInvocation ai) throws Exception {
HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response=ServletActionContext.getResponse();
bean= (BtUser)ServletActionContext.getRequest().getSession().getAttribute("loginUser");
//验证是否已经登录
if (null==bean){//尚未登录,跳转至登录页面
if(isAjaxRequest(request)){
response.sendError(408);//request timeout
return "tologin";
}else{
return "tologin";
}
}else{
return ai.invoke();
}
}
}
然后前台怎么处理呢,利用AJAX的全局事件,因为我把所有的常用JS,CSS都放在inc_right.jsp中了,所以为了省事我还放在这里面
<%
String bp = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath()+"/";
%>
<script>
var glb_bp='<%=bp%>';
</script>
<script src="<%=currPath %>/jslib/global_session.js"></script>
global_session.js
//从jQuery1.8开始,.ajaxError()方法应该只被附加到document上
$(document).ajaxError(function(event,jqxhr,settings,exception){
if(jqxhr.status==408){
alert("操作超时,请重新登录!");
top.location =glb_bp+ "user_login.jsp";
}
});
完美了,原来做好的页面不用做任何修改就可以。当然如果你的页面比较少,也可以将上面的代码直接放在
$(function(){
//从jQuery1.8开始,.ajaxError()方法应该只被附加到document上
$(document).ajaxError(function(event,jqxhr,settings,exception){
if(jqxhr.status){
alert("操作超时,请重新登录!");
alert(glb_bp);
top.location =glb_bp+ "user_login.jsp";
}else if(jqxhr.status==403){
alert("没有权限!");
window.location = "common/nopermit.html";
}else if(jqxhr.status==500){
alert("发生错误!");
window.location = "common/error.html";
}
}
分享到:
相关推荐
Struts通过拦截器实现登录后跳转到登录前页面
js ajax请求实现 struts2 action js ajax请求实现 struts2 action js ajax请求实现 struts2 action js ajax请求实现 struts2 action js ajax请求实现 struts2 action
简单的struts2拦截器利用session拦截用户登录.docx
Ajax struts2 xml flex Ajax struts2 xml flex Ajax struts2 xml flex Ajax struts2 xml flex Ajax struts2 xml flex Ajax struts2 xml flex
struts2在struts2.xml里配置拦截器可以过滤到指定的url的请求,但是对于ajax的请求确是过滤不了,比如说sesion超时或某些页面有权限控制的,通过ajax的请求时系统会报错最近在解决此类问题时碰上了找了不少资料,...
Struts2拦截器(Interceptor) Struts2拦截器(Interceptor)
struts2下通过jquery的ajax从后台传json对象并展示在web页面上的一个小例子,所需的jar包请自己下载否则无法运行,所需的包包括struts的必须包,json的支持包和struts对json的支持包
Struts2拦截器实例——登录校验,登录校验拦截器除了登录请求不被拦截,对用户的所有其他请求进行拦截。对没有登录的用户如果访问其他需要用户的页面进行页面跳转,从新跳转回登录页面。进行登录操作。
Struts2与Ajax 的实现原理,于Servlet+Ajax原理是一致的,都是通过后台的response.getWriter().print("");把数据传输给前台的。 前台Ajax格式如下(需要导入ajax库,比如:jquery-1.11.3.js) 格式: $(function()...
讲述了JQuery,JSON,Struts2实现Ajax异步请求
解决Struts2中的中文乱码。该代码是用作Struts2的拦截器中
本人自己写的struts2结合jquery实现ajax的源码。
Struts2+Ajax实现的用户登录 Struts2 Ajax Sprint Hibernate
struts2中实现AJAX,异步传输,不用刷新页面
struts2 用拦截器 实现用户权限登录 可以直接运行,只单单用到struts的东西。
struts2常用拦截器,struts2经常用到的拦截器,熟悉熟悉
Struts2与AJAX
struts2的ajax异步请求访问方式,不采用servlet的writer模式
MVC Struts2框架搭建,Jquery Ajax异步数据交互,内涵需要的jar包及ppt讲解
Ajax与Struts2结合,实现异步请求数据