`
y806839048
  • 浏览: 1119918 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

ajaxsetup,结合拦截器处理session过期,跳转登录页面

 
阅读更多
1.ajaxsetup------写在公用js中(每个ajax请求之后都会走这个回调)
2.拦截器设置回调的参数,或者请求状态,ajaxsetup回调参数做出处理
3、还可以自动将运行时异常,作为回调的参数(用于捕获异常,提示)
session过期,session=null,要跳转登录页面。跳出iframe,分ajax请求的跳转,普通连接的跳转(拦截处理response并不代表就中断请求返回,可以继续请求链,response继续传递)

package com.wondersgroup.employeeBenefits.core.author.util;

import java.io.PrintWriter;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

import com.wondersgroup.employeeBenefits.core.bases.model.User;
import com.wondersgroup.employeeBenefits.core.bases.util.SpringWebHolder;


public class HandlerSessionInterceptor extends HandlerInterceptorAdapter {//此处一般继承HandlerInterceptorAdapter适配器即可 
    @Override 
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { 
    request.setCharacterEncoding("UTF-8"); 
        response.setCharacterEncoding("UTF-8"); 
        response.setContentType("text/html;charset=UTF-8"); 
        HttpSession session= SpringWebHolder.getSession();
        User user = (User) session.getAttribute("LOGIN_USER");
        String uri = request.getRequestURI();
        uri.substring(0, uri.indexOf("/", 1));
        String[] notFilter = new String[] { "login", "validateCode", "index.do", "index.do", "index.do", "msg.do" ,"sendmail","mailcheck","sendSMS","assign","queryDictDataByParentId","eidtcode","eidtcodemail","saveusercode"};
        if (user==null)//判断session里是否有用户信息 
        { 
        boolean doFilter = true;
        for (String s : notFilter) {
                 if (uri.indexOf(s) != -1) {
                     // 如果uri中包含不过滤的uri,则不进行过滤
                     doFilter = false;
                     break;
               }
           }
        if(doFilter){
        if (request.getHeader("x-requested-with") != null 
                   && request.getHeader("x-requested-with") 
                       .equalsIgnoreCase("XMLHttpRequest"))//如果是ajax请求响应头会有,x-requested-with; 
        {
        response.setHeader("sessionstatus", "timeout");//在响应头设置session状态  
        response.setHeader("url", uri.substring(0, uri.indexOf("/", 1)));
       
        }else{
        PrintWriter out = response.getWriter(); 
                 StringBuilder builder = new StringBuilder(); 
                 builder.append("<script type=\"text/javascript\" charset=\"UTF-8\">"); 
                 builder.append("alert(\"页面过期,请重新登录\");"); 
                 builder.append("window.top.location.href=\""); 
                 builder.append(uri.substring(0, uri.indexOf("/", 1))+"/login.do"); 
                 builder.append("\";</script>"); 
                 out.print(builder.toString()); 
                 out.close(); 
        }
       
           return false; 
//         } 
//         response.setHeader("sessionstatus", "timeout");//在响应头设置session状态 
//         return false; 
       } 
        }
       return true; 
    } 
    @Override 
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { 
        System.out.println("===========HandlerInterceptor1 postHandle"); 
    } 
    @Override 
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { 
        System.out.println("===========HandlerInterceptor1 afterCompletion"); 
    } 
==========================
在公用的js中
/**
* 设置未来(全局)的AJAX请求默认选项
* 主要设置了AJAX请求遇到Session过期的情况
*/

$.ajaxSetup({
contentType:"application/x-www-form-urlencoded;charset=utf-8",
error: function (XMLHttpRequest, textStatus, errorThrown){
if(XMLHttpRequest.status==403){
alert('您没有权限访问此资源或进行此操作');
return false;
}
}, 
         complete:function(XMLHttpRequest,textStatus){  
        var sessionstatus=XMLHttpRequest.getResponseHeader("sessionstatus"); //通过XMLHttpRequest取得响应头,sessionstatus,
        var url=XMLHttpRequest.getResponseHeader("url");
                if(sessionstatus=='timeout'){  
                      //如果超时就处理 ,指定要跳转的页面 
             var top = getTopWinow(); //获取当前页面的顶层窗口对象
             alert('登录超时, 请重新登录.');
                 top.location.href=url+"/login.do"; //跳转到登陆页面
             }  
         }  
   });
/**
* 在页面中任何嵌套层次的窗口中获取顶层窗口
* @return 当前页面的顶层窗口对象------保证登出页面在最上窗口
*/
function getTopWinow(){
    var p = window;
    while(p != p.parent){
        p = p.parent;
    }
    return p;
}









分享到:
评论

相关推荐

    jQuery ajax全局函数处理session过期后的ajax跳转问题

    因为Ajax请求不会导致整个页面的刷新,所以无法通过传统的方式来处理会话过期后的页面跳转问题。针对这一挑战,我们可以采用设置全局Ajax处理函数的策略,当检测到会话过期时,通过Ajax回调函数来进行相应的页面跳转...

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

    本文将详细介绍如何使用全局方法来处理AJAX提交时的Session超时,并跳转到特定页面。 首先,我们可以在服务器端设置一个过滤器(Filter)来检测Session的状态。在Java Web开发中,过滤器可以拦截每个HTTP请求,包括...

    ajaxsetup

    `AjaxSetup`是一个关键的概念,尤其在ASP.NET开发中,它涉及到使用Ajax技术来增强Web应用程序的用户体验。在深入理解`ajaxsetup`之前,我们首先需要了解什么是Ajax以及它在ASP.NET中的应用。 Ajax(Asynchronous ...

    使用Ajax时处理用户session失效问题的解决方法

    在描述中提到,当用户session失效,Spring MVC拦截器可能会返回一段JavaScript,使浏览器跳转到登录页面。但当使用Ajax请求时,由于请求由XMLHttpRequest对象处理,这段JavaScript不会被执行。因此,我们需要在...

    详解.net mvc session失效问题

    当Session失效时,我们可以自定义AuthorizeAttribute的子类,如`AuthorizeOfHandleUnAuthorizeAttribute`,并在`HandleUnauthorizedRequest`方法中处理重定向到登录页面的操作。 ```csharp public class ...

    Web 开发中Ajax的Session 超时处理方法

    在Web开发中,Session超时处理是一个常见的需求,特别是在用户长时间无操作或系统设定的特定时间后,...在实际项目中,可以根据具体需求进行调整和优化,例如添加更友好的用户提示,或者结合前端路由库进行页面跳转等。

    Ajax请求session失效该如何解决

    然而,当Session失效时,用户应该被重新定向到登录页面以重新验证身份。对于常规HTTP请求,我们可以轻松通过登录过滤器来处理这个问题。但针对Ajax请求,由于其异步性质,处理Session失效的方式略有不同。 标题和...

    Laravel重定向,a链接跳转,控制器跳转示例

    总结,Laravel提供了多种方式来处理页面跳转,无论是简单的`a`标签点击跳转,还是通过表单或Ajax请求后的动态跳转,或者是控制器内部的逻辑跳转,都能确保用户体验的流畅性和安全性。理解和掌握这些跳转方式是开发...

    用jQuery.ajaxSetup实现对请求和响应数据的过滤

    总之,`$.ajaxSetup` 和 `beforeSend` 结合使用,为我们提供了一个强大而灵活的机制,可以在Ajax请求发出之前和接收到响应后对数据进行处理,以确保数据的安全性和隐私。这种全局设置的方式尤其适用于大型项目,减少...

    uploadify在Firefox下丢失session问题的解决方法

    2. **使用服务器端处理**:另一种解决方案是改变服务器端的处理逻辑,使其能够识别无session ID的请求。例如,可以在上传接口前先检查请求头,如果没有session ID,则尝试从其他地方(如请求体或特定的参数)获取它...

    jquery的AJAX用户登录

    `success`回调函数处理登录成功的情况,可以弹出提示消息,或者执行登录成功后的操作,如跳转到用户主页。如果登录失败,`error`回调函数将捕获并显示错误信息。 5. **调用方法**: 虽然在本例中,我们已经通过...

    ajax C#结合Jquery实现

    在现代Web开发中,AJAX(Asynchronous JavaScript and XML)技术是不可或缺的一部分,它使得页面无需刷新即可与服务器进行异步交互,提升了用户体验。本文将深入探讨如何利用C#后端与jQuery前端相结合来实现AJAX功能...

    使用struts2+JQuery实现的简单的ajax例子

    Struts2是一个强大的MVC(模型-视图-控制器)框架,它在Java Web开发中...在实际开发中,还可以进一步探索Struts2的拦截器、主题和国际化等功能,以及jQuery的动画效果、事件处理和插件机制,以满足更复杂的业务需求。

    struts2_json_jquery_集成详解.docx

    Struts2提供了丰富的拦截器和结果类型,方便进行表单验证、异常处理等操作。 **JSON(JavaScript Object Notation)** 是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。在Struts2中,...

    使用jquery的方式通过ajax处理json格式的数据

    在Web开发中,jQuery是一个非常流行的JavaScript库,它极大地简化了DOM操作、事件处理和Ajax交互。本教程将深入探讨如何使用jQuery通过Ajax处理JSON格式的数据。JSON(JavaScript Object Notation)是一种轻量级的...

    CH2.AJAX —— 让你的 AJAX 实现得更优雅

    4.页面中引用两个js。(例三) 5.准备工作完成了。ajax 调用服务器方法,只需要在 js 中直接写: [namespace].[classname].[methodname](arguments,onsuccess,onfailed) 其中, arguments 为参数集合 ...

    Ajax全局加载框(Loading效果)的配置

    Ajax全局加载框,也称为Loading效果,是一种在网页进行后台数据请求时向用户展示的反馈机制,用于告知用户页面正在处理数据,需稍等片刻。它通常以一个半透明的遮罩层或动态图标的形式出现,增强用户体验,避免用户...

Global site tag (gtag.js) - Google Analytics