jQuery easyui Session 超时返回登录页面

最近项目使用jQuery easyui 开发,session超时、没有登录直接访问页面需要返回登录页面特殊处理。

说明:测试设置失效时间为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取得响应头,给出提示 。



对于项目上线后,会涉及多个服务器,所以跳转要根据服务器IP去跳转问题,解决方案:window.location.host





代码部分:① web.XML部分配置代码

<!-- filter 权限认证 只对amf请求过滤 -->
<filter>
<filter-name>authFilter</filter-name>
<filter-class>com.lactec.framework.ac.filter.AuthFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>authFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
<!-- session失效时间是30分钟 -->
<session-config>
<session-timeout>30</session-timeout>
</session-config>

               ②java代码

  public class AuthFilter extends BaseAction implements Filter {      

public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {
//登陆判断 如果是/crm_web/loginAction.do 登录跳转
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse rep = (HttpServletResponse) response;
//System.out.println(req.getRequestURI());
String uri = req.getRequestURI();//获取登录的action
if(uri.indexOf("loginAction")>=0){
chain.doFilter(request, response);//跳转页面

}else{
//获取登录用户的Session --基础权限检查,用户没有登陆,被拦截或者session超时请重新登录
if(Utils.isNull(req.getSession()) || Utils.isNull(req.getSession().getAttribute("user")) ){
//如果是ajax请求响应头会有,x-requested-with;
if (req.getHeader("x-requested-with") != null && req.getHeader("x-requested-with").equalsIgnoreCase("XMLHttpRequest"))
{
rep.setHeader("sessionstatus", "timeout");//在响应头设置session状态
rep.getWriter().print("登录超时!"); //打印一个返回值,没这一行,在tabs页中无法跳出(导航栏能跳出),具体原因不明
}
return;
}else {
chain.doFilter(request, response);//跳转页面

}
}

}
}


③ 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;
}





如有疑问可以直接给我回复。。。。。

jQuery easyui Session 超时返回登录页面

标签:class   style   log   com   代码   使用   http   java   si  

原文:http://www.cnblogs.com/tb176/p/4476415.html

转自:http://www.bubuko.com/infodetail-783058.html

猜你喜欢

转载自rd-030.iteye.com/blog/2300211