最近在开发一个政务方面的项目,系统框架用到了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的核心功能包括身份验证、授权、...
虽然 Spring Security 默认使用了 `/logout` 作为退出处理请求路径,登录页面作为退出之后的跳转页面。但是,有的时候我们需要一些个性化设置,例如: * 通过指定 `logoutUrl` 配置改变退出请求的默认路径。 * 通过...
标题: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 Security 4 登录示例详解 #### 一、概览 在现代Web应用开发中,安全性至关重要。Spring Security 是一款广泛使用的安全框架,它为基于Spring的应用提供了全面的安全解决方案,包括认证、授权等核心功能...
- **设置默认的登录后目的地**:可以通过 `<form-login>` 元素的 `default-target-url` 属性来指定用户登录成功后的默认跳转地址。 - **登出处理**:使用 `<logout>` 元素来配置登出逻辑。 - **使用其他认证提供者**...
登录页面被设置为`/login`,成功登录后跳转至`/home`,通过`/logout`路径可以注销并销毁会话。同时,我们还定义了两个内置用户,分别是`admin`和`user`,分别分配了`ROLE_ADMIN`和`ROLE_USER`角色。 这只是Spring ...
2. **身份验证**:当访问受保护资源时,系统会跳转到登录页面,用户输入凭证后,这些信息会被提交到AuthenticationManager进行验证。 3. **授权**:如果认证成功,AccessDecisionManager会检查用户是否有权访问请求...
3. **登录成功后的处理**:当用户认证成功后,系统通常会自动跳转到一个新的页面,例如主页或者用户个人中心。这种跳转可以通过多种方式实现: - **Servlet响应重定向(Redirect)**:使用`response.sendRedirect...
同时,`WEB-INF`目录下的`jsp`子目录可能包含了与用户界面交互的JSP页面,这些页面可能通过Spring Security的标签库来实现权限控制,如显示或隐藏某些内容,或者提供登录和注销功能。 `META-INF`目录是另一个标准的...
它最初被称为Acegi Security,后来在Spring 2.0版本后被重命名为Spring Security。本教程将引导你入门Spring Security 3.x,帮助你理解如何设置和配置这个安全框架。 首先,我们需要创建一个Web项目并导入必要的库...
- **设置默认登录后的目的地:** 用户登录成功后可以跳转到指定页面。 - **注销处理:** 支持注销操作,可以清除用户的会话信息。 - **使用其他认证提供者:** 可以集成自定义的认证提供者。 - **添加密码编码器:** ...
默认情况下,Spring Security 提供了一个简单的登录页面。如果希望自定义登录页面,可以创建 `login.jsp` 并在配置中指定,如 `welcome-file-list` 中所示。 ### 8. 错误处理 在配置中,`access-denied-page` 指定...
在这个例子中,`/admin/*`路径仅允许具有`ROLE_ADMIN`角色的用户访问,登录页面为`/login`,成功后跳转至`/home`,失败则显示错误信息。用户信息存储在配置中,用户名为`admin`,密码为`password`,具有`ROLE_ADMIN`...
- **DelegatingAuthenticationEntryPoint**:未认证时,跳转到登录页面或返回特定响应。 - **RememberMeAuthenticationFilter**:处理“记住我”功能,实现持久化的用户认证。 4. **用户认证**: - **...
SpringBoot整合SpringSecurity简单实现登入登出从零搭建这是SpringSecurity实现登录和登出的一个简单示例,基于 Spring Boot 1.5.6基本实现 : 用户信息存储在数据库中,登陆时从数据库中查询匹配用户信息。...
4. **结果类型**:定义了请求处理后的页面跳转,如成功跳转到登录成功页面,失败则返回错误提示页面。 **Spring** 是一个全面的后端框架,提供依赖注入(DI)和面向切面编程(AOP)。在登录注册中,Spring主要负责...
2. **登录**:控制器接收登录请求,调用Service层的登录方法,比对用户名和密码,验证成功后生成会话并跳转至主页。 3. **查询**:用户信息查询可能用于显示用户列表,Service层调用DAO获取所有用户或按条件筛选用户...
成功则跳转到主页面,可能还需要在页面上显示已登录用户的个人信息。 7. 最后,确保应用具有适当的错误处理机制,以处理可能出现的异常情况,如无效的用户名或密码、数据库连接问题等。 以上就是使用SpringMVC实现...
Spring Web Flow管理Web应用的页面流程,使页面跳转逻辑更加清晰。Spring LDAP简化了LDAP目录服务的访问。Spring Session提供了一种跨服务器的会话管理解决方案,可以将session存储在Redis等分布式存储中。Spring ...
Spring Session则解决了分布式环境下的会话管理问题,当用户在多个服务器之间跳转时,保持其会话状态。OAUTH2协议是现代Web服务中广泛使用的授权框架,Spring Security可以集成OAUTH2,为应用提供第三方登录功能,如...