介绍:
- 后台基于旧代码用的Filter验证,若 Session过期,则跳转登陆页面
- 前台框架:EasyUI
问题:
- 最初后台验证不通过:
1httpServletResponse.sendRedirect(httpServletRequest.getContextPath() +
"/login.html"
);
但是该方式对ajax请求无效,无法跳转到登陆页面
- 所以我把 ajax请求 和 其它静态请求等 分开处理
12
3
4
5
6
if
(servletPath.endsWith(
".do"
)){
java.io.PrintWriter out = httpServletResponse.getWriter();
out.println(
"/login.html"
);
}
else
{
httpServletResponse.sendRedirect(httpServletRequest.getContextPath() +
"/login.html"
);
}
- 现在的问题是,我懒的为每个ajax请求再去重写onSuccess事件判断是否包含 /login.html,这样的话我还不如给Session设置过期 1个月.
解决如下:
12
3
4
5
6
7
8
9
10
11
12
// 这是每个页面的通用引用js文件
<script type=
"text/javascript"
src=
"../scripts/common.js"
></script>
在common.js中:
// 得益于ajax的 global(默认: true)触发全局 AJAX 事件。
var
jumpLoginPageStr =
‘<script type="text/javascript">‘
+
‘$(document).ajaxComplete(function(event, request, settings) {‘
+
‘ if(request.responseText.indexOf("/login.html") != -1){ ‘
+
‘window.top.location.href = "../login.html";‘
+
‘ }‘
+
‘ }) ‘
+
‘</script>‘
;
document.write(jumpLoginPageStr);
- 最初使用ajaxSuccess全局事件,但是发现session过期后,即便ajax status 200 ok,也没有触发这个全局事件,就换成了 ajaxComplete
- request.responseText == "/login.html" // session失效时,也判断为false,原来是:
2017年5月26日 10:24:20