`

(转)AJAX请求遭遇未登录和Session失效的解决方案

阅读更多

转自:https://www.cnblogs.com/morlin/p/4928542.html

 

一般来说我们的项目都有登录过滤器,一般请求足以搞定。但是AJAX却是例外的,所以解决方法是设置响应为session失效。

 

一共分为过滤器和页面JS两个部分的设置,先看过滤器的修改:

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;


/**
 * 登录过滤器
 *  拥有Session是否失效和用户是否登录2个条件判断
 *  如果是ajax请求则设置session超时
 * @author Merlin.Ma
 *
 */
public class LoginFilter implements Filter{
    
    private String redirectUrl = "/login.html";
    private String sessionKey = "userName";

    @Override
    public void destroy() {
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        
        HttpServletRequest req = (HttpServletRequest) request;
        HttpServletResponse rep = (HttpServletResponse) response;
        
        HttpSession session = req.getSession();
        
        if( session == null || session.getAttribute(sessionKey) == null){
            //如果判断是 AJAX 请求,直接设置为session超时
            if( req.getHeader("x-requested-with") != null && req.getHeader("x-requested-with").equals("XMLHttpRequest")  ) {
            
                rep.setHeader("sessionstatus", "timeout"); 
                
            } else {
                rep.sendRedirect( req.getContextPath() + redirectUrl);
            }
            
        }else {
            chain.doFilter(request, response);
        }      
    }

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        
        String url = filterConfig.getInitParameter("redirectUrl");
        String key = filterConfig.getInitParameter("sessionKey");
        
        redirectUrl = url == null? redirectUrl:url;
        sessionKey = key == null ? sessionKey : key ;
    }

    
}

 

//全局的ajax访问,处理ajax清求时sesion超时 
$.ajaxSetup({
    contentType : "application/x-www-form-urlencoded;charset=utf-8",
    complete : function(XMLHttpRequest, textStatus) {
        var sessionstatus = XMLHttpRequest.getResponseHeader("sessionstatus"); // 通过XMLHttpRequest取得响应头,sessionstatus,
        if (sessionstatus == "timeout") {
            // 如果超时就处理 ,指定要跳转的页面
            window.location.replace("login.html");
        }
    }
});

 页面加载这段js代码,然后开始调用ajax。在不登陆或者session失效的情况下,可以看到页面跳转到登录页面。

分享到:
评论

相关推荐

    完美解决ajax访问遇到Session失效的问题

    最近由于一个项目,模块切换为ajax请求数据,当Session失效后,ajax请求后没有返回值,只有响应的html:<html>[removed]window.open(‘http://192.168.0.118:8080/welcomeAction/loginUI.do’,’_top’);...

    Ajax请求session失效该如何解决

    总结起来,解决Ajax请求Session失效的关键在于: 1. 在过滤器中检测Session状态,对Ajax请求设置特定的响应头。 2. 在前端JavaScript中监听Ajax请求的响应,根据响应头判断Session是否超时并做出相应处理。 这种...

    ajax请求Session失效问题

    针对AJAX请求Session失效的问题,我们需要一种方法来识别出这种情况并做出适当的响应。关键在于检查HTTP请求头中的`X-Requested-With`字段。这个字段在AJAX请求中会被设置为`XMLHttpRequest`,表明这是一个异步请求...

    ajax 操作全局监测,用户session失效的解决方法

    从内容上来看,文章内容的重复性可能是由于OCR扫描时识别错误或漏识别导致的,但核心内容表达清晰,即介绍了在使用AJAX进行前后端交互时,如何监测用户session状态,并在用户session失效时提供解决方案。这种解决...

    Ajax Session失效跳转登录页面的方法

    通过上述方法,开发者可以有效地解决在使用Ajax请求时,Session失效导致无法正确跳转到登录页面的问题。这样的处理不仅能够提供更为流畅的用户体验,还可以增强应用的安全性。 需要注意的是,本文的技术背景主要...

    详解.net mvc session失效问题

    总的来说,处理.NET MVC中的Session失效问题需要关注请求类型,区分Ajax和非Ajax请求,以及认证状态。通过自定义授权过滤器和调整客户端代码,我们可以确保用户在Session失效时被引导至登录页面,从而维护应用的安全...

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

    通过这样的方式,我们能够有效地处理Ajax请求时的用户session失效问题,确保用户在session过期后能够被正确地引导至登录页面。同时,这也是一种常见的跨域问题解决方案,因为跨域请求同样需要在服务器端返回正确的...

    express如何解决ajax跨域访问session失效问题详解

    因此,当前端的ajax请求到不同的域,session信息无法被正确传递,导致session失效。 解决这个问题的关键在于允许跨域请求携带cookies。在客户端(即浏览器端),我们需要在jQuery的ajax设置中添加`xhrFields:{...

    解决前后端分离 vue+springboot 跨域 session+cookie失效问题

    综上所述,解决Vue+Spring Boot跨域和Session失效问题的关键在于配置CORS策略以允许携带Cookie的跨域请求,并确保Session配置正确。同时,考虑采用Token认证机制,如JWT,以实现更灵活的认证和授权管理。

    如何解决Ajax访问不断变化的session的值不一致以及HTTP协议中的GET、POST的区别

    在WEB开发过程中,经常...通过这段内容,我们可以了解到session数据同步问题的解决方案,以及HTTP请求方法GET和POST的差异和适用场景。这有助于我们在开发Web应用时做出更合理的技术选择,从而提升应用性能和用户体验。

    解决laravel session失效的问题

    这篇文章讲述了在Laravel 5.2版本中遇到的Session失效问题,并提供了解决方案。首先,文章提到了Laravel不使用传统的`$_SESSION`超全局变量,而是提供了自己的一套Session管理机制。开发者需要通过Laravel提供的...

    phpcms web发布session过期问题解决

    3. **心跳检测**:在页面中添加定时的Ajax请求(也称为“心跳”或“ping”),在用户浏览网页时定期更新session,确保session不会因为超时而失效。这种方法需在前端和后端同时进行相应设置。 4. **保持登录状态**:...

    浏览器关闭使session失效的问题多种解决方式

    在Web开发中,会话管理是保证网站安全性和用户体验的关键环节。其中,session是一种普遍采用的会话管理方式,它通过服务器端...在选择解决方案时,应当考虑到用户行为的多样性和服务器资源的承载能力,进行权衡和优化。

    jqSession的js文件

    `jqSession.js`是一个基于jQuery的JavaScript库,主要...总的来说,`jqSession.js`是一个实用的工具,它通过jQuery的简洁语法提供了客户端会话管理的解决方案,降低了开发者的编程复杂度,提高了应用程序的用户体验。

    j2EE 缓存 Web前端优化 后台 服务器优化

    - **开源框架缓存**:如Hibernate的一级缓存和二级缓存,Ehcache等,提供开箱即用的缓存解决方案。 - **Hibernate一级缓存**:Session级别,存储实体对象,事务范围内有效,用于同一事务内的数据共享。 - **...

    PHP商城系统 v2.0.4

    在当今瞬机万变的市场环境中,快速高效的IT解决方案是您业务成功的关键。 大量AJAX技术,让用户操作更省心方便大量缓存技术,从而减轻服务器数据库负载目前市场上权限最全的商城系统(多级管理权限控制,让网站多人...

    struts1的令牌解决页面重复提交问题

    - 对于Ajax请求,可能需要自定义拦截器或手动处理令牌,因为隐藏字段不会随异步请求发送。 通过以上步骤,Struts1的令牌机制可以有效地防止页面的重复提交,保护业务数据的完整性。然而,随着技术的发展,现代框架...

    java面试知识

    ### Java面试知识详解 #### 基础篇 ##### JDK常用的包 - **java.lang**:包含所有编程必需的基础类,如String、Math等。 - **java.util**:提供了大量...##### Ajax请求Session超时问题 - **解决方法**: - 设置...

    java面试题实践收集及答案详解

    - **项目经验**:准备好介绍自己参与过的项目,特别是遇到的技术挑战和解决方案。 - **沟通技巧**:清晰地表达自己的想法,积极倾听面试官的问题,并给出有针对性的回答。 - **行为面试**:准备STAR法则(Situation...

    验证码生成 判断

    - **项目结构**:`VerificationCode.sln`是一个Visual Studio解决方案文件,可能包含了验证码生成和验证的相关项目和文件。 - **核心类**:`VerificationCode`可能是生成验证码的核心类,包含生成、存储和验证的...

Global site tag (gtag.js) - Google Analytics