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取得响应头,给出提示 。

① 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;
   }
时间: 2024-10-17 11:41:52

jQuery easyui Session 超时返回登录页面的相关文章

session过期返回登录页面跳出frame

session 过期返回登录页面 方法1, HttpSession session = request.getSession(); String LOGIN_ID = (String) session.getAttribute("LOGIN_ID"); if (null == LOGIN_ID||"".equals(LOGIN_ID)) { java.io.PrintWriter out = response.getWriter(); out.println(&qu

asp.net mvc cookie超时返回登录页面问题

filterContext.HttpContext.Response.Write("<script>top.location.href = '/Login/Index';</script>"); 在使用超时设置时在本机调试时可以返回登录页面,在本机部署也可以,但是在服务器部署后没有跳转到登录页面,报错,以前的代码如下: public class HandlerLoginAttribute : AuthorizeAttribute    {        publ

解决session过期后登录页面嵌套在框架中的问题

只要在登录页面中加入一下脚本即可: <script language="text/javascript"> //在嵌套时,就刷新上级窗口 if(window.parent!=window){ window.parent.location.reload(true); } </script> 解决session过期后登录页面嵌套在框架中的问题,布布扣,bubuko.com

如果后台用framset框架,session过期,整个跳出,返回 登录页面

如果session过期了,登录页面会在framset框架的右边显示,只能用 js 来做,让整个框架跳出去: 然而,这里 js 必须要用"top"才可以,作用是让整个framset都跳转,直接用 window.location.href是没有效果的: 1 //__MODULE__:TP框架分组常量 2 $group_url = __MODULE__; //分组,/index.php/Admin 3 4 //window.local.href跟TP框架的重定向"$this->

ajax提交session超时跳转页面使用全局的方法来处理

来自:http://www.jb51.net/article/43770.htm 如果是ajax提交,超时时从服务器发出的跳转命令就不会起作用,所以如果是session超时,而且是在ajax请求,就在响应头里,再用一个全局的方法来处理session超时要跳转的页面. 在过滤器中写入如下方法:(未测试) public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws I

SSH系列:(21)Session过期,登录页面嵌套的问题

在系统中使用了frameset,当前用户的系统登录信息失效后:如果再点击左边的菜单,那么在右边的显示登录页面,而正确的应该是整个页面返回到登录页. 解决这个问题:应该在跳转到登录页面中使用js脚本判断,是否当前页面在框架内,即当前页面的窗口是否是顶级窗口,如果是子窗口的话:可以直接刷新父窗口的地址则会自动地整个页面跳转为登录页. <scripttype="text/javascript">          if(window!= window.parent){      

session过期,登录页面嵌套问题解决

项目主页是框架模式时,如果登录后长时间没有活动(操作),存储在session中的登录信息过期了,这时再去进行操作时,就会出现登录页面嵌套的问题,怎么解决呢? 这里介绍一种方法,只需要加上一段javascript代码即可: 在登录页面/WebRoot/login.jsp加上以下javascript代码: <script language="javascript"> if (top != window) top.location.href = window.location.h

flutter 统一处理token 失效返回登录页面

监听到code ==403 使用eventBus  统一触发. 遇到的问题是 Navigator.of(context).pushAndRemoveUntil( new MaterialPageRoute(builder: (context) => new loginPage() ), (route) => route == null);这个方法只在当前页面生效,我是放着首页那块 了首页eventbus 触发,但是页面不跳转 解决办法是换一种不需要context 也能够进行页面跳转的方法. 利

Yii 的session 实现返回上上页面

学习session的页面:http://www.yiichina.com/doc/guide/2.0/runtime-sessions-cookies 关键摘要: $session = Yii::$app->session; // 检查session是否开启 if ($session->isActive) ... // 开启session $session->open(); // 关闭session $session->close(); // 销毁session中所有已注册的数据