码迷,mamicode.com
首页 > Web开发 > 详细

jQuery easyui Session 超时返回登录页面

时间:2015-05-05 12:19:21      阅读:899      评论:0      收藏:0      [点我收藏+]

标签:

                               

         说明:测试设置失效时间为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代码

 public class AuthFilter extends BaseAction implements Filter {     

 public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException{

  HttpServletRequest req = (HttpServletRequest) request;

  HttpServletResponse rep = (HttpServletResponse) response;
  
  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 超时返回登录页面

标签:

原文地址:http://www.cnblogs.com/tb176/p/4478441.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!