说明:测试设置失效时间为1分钟,登录成功后1分钟去点击操作处罚事件,执行①连接到com.lactec.framework.ac.filter.AuthFilter这个类判断执行的action操作。
判断session是否为空,超时就返回,我用的是ajax请求:如果是ajax请求响应头会有,x-requested-with;
设置: rep.setHeader("sessionstatus", "timeout");//在响应头设置session状态
rep.getWriter().print("登录超时!"); //打印一个返回值,没这一行,在tabs页中无法跳出(导航栏能跳出),具体原因不明
前台部分通过 XMLHttpRequest.getResponseHeader("sessionstatus"); //通过XMLHttpRequest取得响应头,给出提示 。
① web.XML部分配置代码
1 <!-- filter 权限认证 只对amf请求过滤 -->
2 <filter>
3 <filter-name>authFilter</filter-name>
4 <filter-class>com.lactec.framework.ac.filter.AuthFilter</filter-class>
5 </filter>
6 <filter-mapping>
7 <filter-name>authFilter</filter-name>
8 <url-pattern>*.do</url-pattern>
9 </filter-mapping>
10 <!-- session失效时间是30分钟 -->
11 <session-config>
12 <session-timeout>30</session-timeout>
13 </session-config>
②java代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
|
③ JS代码部分
$.ajaxSetup({
error: function (XMLHttpRequest, textStatus, errorThrown){
if(XMLHttpRequest.status==403){
$.messager.alert('我的消息', '您没有权限访问此资源或进行此操作!', 'success');
return false;
}
},
complete:function(XMLHttpRequest,textStatus){
var sessionstatus=XMLHttpRequest.getResponseHeader("sessionstatus"); //通过XMLHttpRequest取得响应头,sessionstatus,
if(sessionstatus=='timeout'){
//如果超时就处理 ,指定要跳转的页面
var top = getTopWinow(); //获取当前页面的顶层窗口对象
$.messager.alert('我的消息', '登录超时-请重新登录!', 'info');
top.location.href = "http://"+window.location.host+"/crm_web/login_new.html"; //跳转到登陆页面 对多服务器同样适用
}
}
});
/**
* 在页面中任何嵌套层次的窗口中获取顶层窗口
* @return 当前页面的顶层窗口对象
*/
function getTopWinow(){
var p = window;
while(p != p.parent){
p = p.parent;
}
return p;
}