在web系统中,身份校验是常用的方式。登录页面,是为用户提供登录的入口。但是,有的时候,我们使用ajax操作的时候,由于得不到正确的数据信息,而使页面停留不能跳转到登录页面。其实,http协议的请求头可以帮我们轻松解决这个问题。
在JavaEE的规范中,拦截器,是我们对资源请求的一种过滤方式,而对于安全页面的身份校验,我们也采用了这样的方式。通常情况下,我们在拦截器中,获取匿名用户要请求的页面是需要身份校验,那么我们需要跳转到登录页面,提示用户输入用户信息。
但是,由于ajax采用异步加载数据信息,获取的为text、json、xml等格式数据。这个时候,当我从服务器响应到客户端的如果是登录页面。ajax是无法正确解析这个页面信息,于是就会出现如下现象:
1. 在弹出层中加载出登录页面
2. 无法识别json、xml数据(html不是数据信息)
其实,在拦截器中,我们可以通过HttpServletRequest对象,读取Header信息就可以区分,当前请求是ajax还是普通请求。基于jquery的ajax,在请求头中有如下配置:
X-Requested-With:XMLHttpRequest
那么,我们可以通过
request.getHeader("X-Requested-With");
当我们判断是ajax请求的时候,我们响应到客户端的信息就做一下处理。告诉ajax,你需要跳转登录页面。
当然,到现在,我们的工作并没有结束,我们还需要设置一下$.ajaxSetup(),具体配置如下:
$.ajaxSetup({
timeout: 3000, // 超时时间
error: function(xhr, status, msg) {
// 这里可以从xhr中读取,服务器响应回来的数据信息
}
});
通过ajaxSetup可以在全局设置jquery的ajax属性,避免,每一个ajax单独配置。