拦截器针对ajax Session失效跳转到登录页面

在Struts应用中,我们发出的请求都会经过 相应的拦截器进行相关处理,一般都会有一个用户登录拦截(Session失效拦截);一般请求的话,如果Session失效时,我们会跳到登录页面,可是如果我们采用AJAX请求时,将会返回登录页面的HTML代码,这肯定不是我们想要的,那么我们如何解决呢?请看以下步骤:

1.拦截器代码

public String intercept(ActionInvocation invocation) throws Exception {
		HttpServletRequest request = ServletActionContext.getRequest();
		HttpServletResponse response = ServletActionContext.getResponse();
		Map<String, Object> session = ActionContext.getContext().getSession();

		if (UserAction.class == invocation.getAction().getClass()) {
			return invocation.invoke();
		}
		
		if (session.get("USER") == null) {
			if (isAjaxRequest(request)) {
				response.setHeader("sessionstatus", "timeout");
				return null;
			} else {
				return Action.LOGIN;
			}
		}
		return invocation.invoke();
	}

	private boolean isAjaxRequest(HttpServletRequest request) {
		String header = request.getHeader("X-Requested-With");
		if (header != null && "XMLHttpRequest".equals(header))
			return true;
		else
			return false;
	}


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

jquery 可以用$.ajaxSetup 方法

[javascript]  view plain copy
  1. //全局的ajax访问,处理ajax清求时sesion超时  
  2.          $.ajaxSetup({   
  3.              contentType:"application/x-www-form-urlencoded;charset=utf-8",   
  4.              complete:function(XMLHttpRequest,textStatus){   
  5.                      var sessionstatus=XMLHttpRequest.getResponseHeader("sessionstatus"); //通过XMLHttpRequest取得响应头,sessionstatus,  
  6.                      if(sessionstatus=="timeout"){   
  7.                                  //如果超时就处理 ,指定要跳转的页面  
  8.                                          window.location.replace("${path}/common/login.do");   
  9.                                  }   
  10.                       }   
  11.              }   
  12.            });  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值