zoukankan      html  css  js  c++  java
  • 重写ajax方法实现异步请求session过期时跳转登录页面(转)

    一般我们会在过滤器里判断登录状态,如果没登录就跳转登录页面,过滤器java核心代码如下:

    1. UserItem loginUser = (UserItem)request.getSession().getAttribute("loginUser");  
    2. if(loginUser == null) {  
    3.     response.sendRedirect("/login.action");  
    4. }  
    这个对于普通页面来说完全没问题,但是在使用ajax的时候往往得不到想要的效果。因为页面根本没跳转,只是捕获到了登录页面的源码而已。

    网上一堆庸人给出一堆扯蛋的方法,主要有。

    1.返回的字符串附加登录状态;(那么多,你愿意改么,而且前后端都得改,编码的时候还要总去考虑那个状态烦不烦)

    2.修改http头信息;(装B深沉型)

    3.修改jquery源文件判断;(勉强算个程序员,但是尽力不去动源,性能问题你还得解压再压缩,别人也不一定知道你改过源码)

    我的解决方案跟第三种方法思路接近,重写ajax方法实现前置处理,代码如下:

    [javascript] view plain copy
    print?
    1. jQuery(function($){  
    2.     // 备份jquery的ajax方法    
    3.     var _ajax=$.ajax;  
    4.     // 重写ajax方法,先判断登录在执行success函数   
    5.     $.ajax=function(opt){  
    6.         var _success = opt && opt.success || function(a, b){};  
    7.         var _opt = $.extend(opt, {  
    8.             success:function(data, textStatus){  
    9.                 // 如果后台将请求重定向到了登录页,则data里面存放的就是登录页的源码,这里需要找到data是登录页的证据(标记)  
    10.                 if(data.indexOf('weinianjie') != -1) {  
    11.                     window.location.href= Globals.ctx + "/login.action";  
    12.                     return;  
    13.                 }  
    14.                 _success(data, textStatus);    
    15.             }    
    16.         });  
    17.         _ajax(_opt);  
    18.     };  
    19. });  

    在登录页面的源码里面,你随便找个地方打个标记然后隐藏掉,比如我的标记就是weinianjie。对于$.get和$.post就不用说了吧,这两个方法都是调用了$.ajax方法的,所以也就自动获取了前置判断能力。

    大功告成,注意以上扩展需要放在你的所有ajax请求之前执行。



  • 相关阅读:
    02/Oct/2019:11:55:28 类型的时间转换为
    Flume 实时获取日志内容插入MySQL
    MySQL UTC时间转北京时间 | convert_tz()函数
    使用kettle实现循环
    python 获取系统环境变量 os.environ and os.putenv
    Python
    linux如何判断上一条命令执行是否正确
    局域网两台主机通过网络共享文件
    Kettle(Pentaho)实现web方式远程执行job或transformation
    kettle发送邮件 运行日志
  • 原文地址:https://www.cnblogs.com/jpfss/p/8329121.html
Copyright © 2011-2022 走看看