`

spring security session 过期后页面跳转至登录页面

 
阅读更多

最近在开发一个政务方面的项目,系统框架用到了spring security,结果出现了一个问题:就是session过期后页面跳转至登录页面的问题;

 这里要分两种情况了;

 第一种:普通的请求,如form表单提交,重定向等

spring-security.xml配置如下:

<session-management invalid-session-url="http://172.31.60.117:8088/mslogin/view/login.jsp"  
session-fixation-protection="newSession" >
		   <concurrency-control max-sessions="1" error-if-maximum-exceeded="true" />
</session-management> -

 web.xml配置如下:

<listener>
	 <listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</listener-class>
</listener>
     

 于是就可以监听到session后期后普通请求的拦截,跳转至登录页面。结果后期测试发现ajax请求无法拦截至登录页面,这时候的现象为ajax请求发出后无法请求到数据,但是页面又不能跳转,于是代码改为下面这种,既可以支持普通请求拦截,又可以支持ajax请求拦截;

spring-security.xml 配置如下

 <session-management invalid-session-url="/public/invalidate" 
session-fixation-protection="newSession" >
<concurrency-control max-sessions="1" error-if-maximum-exceeded="true" />
</session-management>

 这里/public/invalidate为Controller请求路径:创建Controller

package com.jointem.ngcms.controller;

import java.io.IOException;

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

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * @Title: InvalidateSession
 * @Description: 
 * @Author: bql
 * @Date: 2016年4月20日
 * @Version: v1.0.0
 * @Copyright: 2016 www.jointem.com Inc. All rights reserved.
 * @Update: 1. Create File
 */
@Controller
public class InvalidateSession
{
    /**
     * This url gets invoked when spring security invalidates session (ie timeout).
     * Specific content indicates ui layer that session has been invalidated and page should be redirected to logout. 
     */
    @RequestMapping(value = "/public/invalidate")
    @ResponseBody
    public String invalidateSession(HttpServletRequest reqeust,HttpServletResponse response) {
    	 String ajaxHeader = reqeust.getHeader("X-Requested-With");
	        boolean isAjax = "XMLHttpRequest".equals(ajaxHeader);
	        if (isAjax) {
	        	return "invalidSession";
	        } else {
	        	try {
					response.sendRedirect("http://172.31.60.117:8088/mslogin/view/login.jsp");
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
	        }
        return "";
    }
}

注意这里的几行代码为判断是否是ajax请求。

String ajaxHeader = reqeust.getHeader("X-Requested-With");
	        boolean isAjax = "XMLHttpRequest".equals(ajaxHeader);

 如果是ajax请求,则返回invalidSession字符串,在前端js中添加如下代码就可以监听到后端的返回值

//全局的ajax访问,处理ajax清求时sesion超时
       $.ajaxSetup({
    	   complete: function(xhr, status) {
                if (xhr.responseText == 'invalidSession') {
                    window.location = "http://172.31.60.117:8088/mslogin/view/login.jsp";
                }
            }
  }); 

 $.ajaxSetup为全局监听ajax请求,当后端返回值为invalidSession就可以跳转至自己需要的页面了。

 

 

 

在google 上搜了好半天,到最后也没解决掉问题,于是就自己改造为以上提供的代码,希望能帮助到遇到和我同样问题的小伙伴。

 

分享到:
评论

相关推荐

    spring security 3 多页面登录 小秘密小运气

    在"Spring Security 3 多页面登录 小秘密小运气"这个主题中,我们可以深入探讨Spring Security 3如何支持多个登录页面以及其中可能涉及的一些技巧和策略。 首先,Spring Security的核心功能包括身份验证、授权、...

    SpringSecurity退出功能实现的正确方式(推荐)

    虽然 Spring Security 默认使用了 `/logout` 作为退出处理请求路径,登录页面作为退出之后的跳转页面。但是,有的时候我们需要一些个性化设置,例如: * 通过指定 `logoutUrl` 配置改变退出请求的默认路径。 * 通过...

    springsecurity3.1.pdf

    标题:springsecurity3.1.pdf 描述:springsecurity3.1.pdf 标签:spring security3.1 部分内容:SpringSecurity Reference Documentation by Ben Alex and Luke Taylor 3.1.4.RELEASE **一、Spring Security 3.1...

    spring security4登陆例子

    ### Spring Security 4 登录示例详解 #### 一、概览 在现代Web应用开发中,安全性至关重要。Spring Security 是一款广泛使用的安全框架,它为基于Spring的应用提供了全面的安全解决方案,包括认证、授权等核心功能...

    springsecurity.pdf

    - **设置默认的登录后目的地**:可以通过 `&lt;form-login&gt;` 元素的 `default-target-url` 属性来指定用户登录成功后的默认跳转地址。 - **登出处理**:使用 `&lt;logout&gt;` 元素来配置登出逻辑。 - **使用其他认证提供者**...

    SpringSecurity应用指南

    登录页面被设置为`/login`,成功登录后跳转至`/home`,通过`/logout`路径可以注销并销毁会话。同时,我们还定义了两个内置用户,分别是`admin`和`user`,分别分配了`ROLE_ADMIN`和`ROLE_USER`角色。 这只是Spring ...

    spring-security-core-2.0.6.RELEASE

    2. **身份验证**:当访问受保护资源时,系统会跳转到登录页面,用户输入凭证后,这些信息会被提交到AuthenticationManager进行验证。 3. **授权**:如果认证成功,AccessDecisionManager会检查用户是否有权访问请求...

    Javaweb 登录页面自动跳转

    3. **登录成功后的处理**:当用户认证成功后,系统通常会自动跳转到一个新的页面,例如主页或者用户个人中心。这种跳转可以通过多种方式实现: - **Servlet响应重定向(Redirect)**:使用`response.sendRedirect...

    spring security example

    同时,`WEB-INF`目录下的`jsp`子目录可能包含了与用户界面交互的JSP页面,这些页面可能通过Spring Security的标签库来实现权限控制,如显示或隐藏某些内容,或者提供登录和注销功能。 `META-INF`目录是另一个标准的...

    spring-security入门

    它最初被称为Acegi Security,后来在Spring 2.0版本后被重命名为Spring Security。本教程将引导你入门Spring Security 3.x,帮助你理解如何设置和配置这个安全框架。 首先,我们需要创建一个Web项目并导入必要的库...

    Spring security

    - **设置默认登录后的目的地:** 用户登录成功后可以跳转到指定页面。 - **注销处理:** 支持注销操作,可以清除用户的会话信息。 - **使用其他认证提供者:** 可以集成自定义的认证提供者。 - **添加密码编码器:** ...

    springSecurity3入门级文档.doc

    默认情况下,Spring Security 提供了一个简单的登录页面。如果希望自定义登录页面,可以创建 `login.jsp` 并在配置中指定,如 `welcome-file-list` 中所示。 ### 8. 错误处理 在配置中,`access-denied-page` 指定...

    用SpringSecurity保护Web的安全

    在这个例子中,`/admin/*`路径仅允许具有`ROLE_ADMIN`角色的用户访问,登录页面为`/login`,成功后跳转至`/home`,失败则显示错误信息。用户信息存储在配置中,用户名为`admin`,密码为`password`,具有`ROLE_ADMIN`...

    SpringSecurity-从入门到精通文章的源码文件

    - **DelegatingAuthenticationEntryPoint**:未认证时,跳转到登录页面或返回特定响应。 - **RememberMeAuthenticationFilter**:处理“记住我”功能,实现持久化的用户认证。 4. **用户认证**: - **...

    spring-security-login:SpringBoot-整合SpringSecurity实现登入登出简单例子

    SpringBoot整合SpringSecurity简单实现登入登出从零搭建这是SpringSecurity实现登录和登出的一个简单示例,基于 Spring Boot 1.5.6基本实现 : 用户信息存储在数据库中,登陆时从数据库中查询匹配用户信息。...

    Struts2+spring+hibernate(登录与注册模块)

    4. **结果类型**:定义了请求处理后的页面跳转,如成功跳转到登录成功页面,失败则返回错误提示页面。 **Spring** 是一个全面的后端框架,提供依赖注入(DI)和面向切面编程(AOP)。在登录注册中,Spring主要负责...

    Spring与Hibernate整合实例(博客用户登录增删改查)

    2. **登录**:控制器接收登录请求,调用Service层的登录方法,比对用户名和密码,验证成功后生成会话并跳转至主页。 3. **查询**:用户信息查询可能用于显示用户列表,Service层调用DAO获取所有用户或按条件筛选用户...

    SpringMVC登录实例

    成功则跳转到主页面,可能还需要在页面上显示已登录用户的个人信息。 7. 最后,确保应用具有适当的错误处理机制,以处理可能出现的异常情况,如无效的用户名或密码、数据库连接问题等。 以上就是使用SpringMVC实现...

    基于Spring Boot和Spring Cloud实现微服务架构学习(一).pdf

    Spring Web Flow管理Web应用的页面流程,使页面跳转逻辑更加清晰。Spring LDAP简化了LDAP目录服务的访问。Spring Session提供了一种跨服务器的会话管理解决方案,可以将session存储在Redis等分布式存储中。Spring ...

    基于SPRING构建J2EE框架

    Spring Session则解决了分布式环境下的会话管理问题,当用户在多个服务器之间跳转时,保持其会话状态。OAUTH2协议是现代Web服务中广泛使用的授权框架,Spring Security可以集成OAUTH2,为应用提供第三方登录功能,如...

Global site tag (gtag.js) - Google Analytics