首页 > 其他分享 >springboot3 security6.0.2 session timeout 方案

springboot3 security6.0.2 session timeout 方案

时间:2024-02-26 16:24:55浏览次数:36  
标签:String request security6.0 session springboot3 import public 408

方案1
package jp.co.toppan.dch.web.core.security;

import jakarta.servlet.ServletException;
import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.apache.commons.lang3.StringUtils;
import org.springframework.security.web.session.InvalidSessionStrategy;
import org.springframework.stereotype.Component;

import java.io.IOException;

@Component
public class CustomInvalidSessionStrategy implements InvalidSessionStrategy {
@Override
public void onInvalidSessionDetected(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
Cookie cookie = new Cookie("JSESSIONID", null);
cookie.setPath(getCookiePath(request));
cookie.setMaxAge(0);
response.addCookie(cookie);
String xRequestedWith = request.getHeader("x-requested-with");
// ajax
if (StringUtils.isNotBlank(xRequestedWith) && "XMLHttpRequest".equals(xRequestedWith)) {
response.setStatus(408);
}else {
String servletPath = request.getServletPath();
logout后直接跳到login画面,其他情况跳到timeout画面
if (StringUtils.isNotBlank(servletPath) && "/index".equals(servletPath)) {
request.getRequestDispatcher(servletPath).forward(request,response);
}else{
request.getRequestDispatcher("/408").forward(request,response);
}
}
}
private String getCookiePath(HttpServletRequest request) {
String contextPath = request.getContextPath();
return contextPath.length() > 0 ? contextPath : "/";
}
}

@Configuration
@EnableWebSecurity
@RequiredArgsConstructor
@EnableMethodSecurity(securedEnabled = true, jsr250Enabled = true)
public class SecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests(authorize -> authorize
.dispatcherTypeMatchers(DispatcherType.FORWARD, DispatcherType.ERROR).permitAll()
.requestMatchers("/index", "/Login", "/408", "/favicon.ico", "/temp/", "/assets/", "/plugins/**")
.permitAll()
.anyRequest().authenticated())
.sessionManagement(session -> session.invalidSessionStrategy(customInvalidSessionStrategy))
.logout(logout->logout.deleteCookies("JSESSIONID"));
}
}

@Controller
public class ErrorController extends BaseController {
@GetMapping("/408")
public String error408() {
return "error/408";
}
}

前台ajax处理

$.ajaxSetup({
...
error: function (data) {
if (data.status == 408) {
window.location = "...";
}
}
});

方案2
核心是配置
http.sessionManagement(session -> session
.invalidSessionUrl("/timeout");

controller文件
@GetMapping("/timeout")
public String timeout(HttpServletRequest request, HttpServletResponse response) {
String xRequestedWith = request.getHeader("x-requested-with");
if ("XMLHttpRequest".equals(xRequestedWith)) {
response.setStatus(408);
return null;
}else{
return "error/408";
}
}

参考地址:
https://docs.spring.io/spring-security/reference/servlet/authentication/session-management.html

标签:String,request,security6.0,session,springboot3,import,public,408
From: https://www.cnblogs.com/atq999/p/18034591

相关文章

  • session验证与jwt验证
    简单谈谈session验证和jwt验证session验证简化版原理1.用户rds登录login页面,服务器向用户端发送一个sessionid,同时服务器创建一个和这个sessionid相关的会话信息(用于该用户下次session验证)2.用户再次登录或者访问授权页面,将sessionid发送到服务器3.服务器通过保留的会话信......
  • 一般处理程序中的IRequiresSessionState
    一般处理程序中,还未跑入主程序,就直接断掉了,按F12提示错误:异常详细信息:System.Web.HttpException:请求在此上下文中不可用第一次遇见这种情况,百思不得其解,通过与以前的代码对比,发现少了一个接口IRequiresSessionState,加上后可以了!!! 接口的简介:在一般处理程序中,如果要使用Se......
  • 接私活利器!推荐一个基于SpringBoot3的后台管理框架
    大家好,我是Java陈序员。今天,给大家推荐一个后台管理框架,适合二次定制开发、接私活、源码学习等场景。关注微信公众号:【Java陈序员】,获取开源项目分享、AI副业分享、超200本经典计算机电子书籍等。项目介绍Admin3——一个轻巧的后台管理框架,项目后端基于Java17、SpringBo......
  • 读论文-基于序列/会话的推荐:挑战,方法,应用和机遇(Sequential/Session-based Recommend
    前言今天读的论文为一篇于2022年7月7日发表在第45届国际ACM信息检索研究与发展会议论文集(Proceedingsofthe45thInternationalACMSIGIRConferenceonResearchandDevelopmentinInformationRetrieval.)的论文,文章主要讲述了序列推荐系统(SRSs)和基于会话的推荐系统(SBRSs......
  • 02-21 记SpringBoot3 打包成exe的过程以及一些问题
    先说说基本流程:(Windows环境,springbootv3.2.1)1.首先mavenpom.xml中加入如下代码<build><plugins><plugin><groupId>org.graalvm.buildtools</groupId><artifactId>native-maven-plugi......
  • oracle查看某session ip
    先创建个触发器获取ipcreateorreplacetriggeron_logon_triggerafterlogonondatabasebegindbms_application_info.set_client_info(sys_context('userenv','ip_address'));end;可以使用下方语句查看session的ipselect/*+PARALLEL(4)*/a.inst_id,......
  • Java21 + SpringBoot3使用Spring Security时如何在子线程中获取到认证信息
    目录前言原因分析解决方案方案1:手动设置线程中的认证信息方案2:使用DelegatingSecurityContextRunnable创建线程方案3:修改SpringSecurity安全策略通过设置JVM参数修改安全策略通过SecurityContextHolder修改安全策略总结前言近日心血来潮想做一个开源项目,目标是做一款可以适配多......
  • FreeSWITCH在session上执行定时挂机与取消
    操作系统:CentOS7.6_x64 FreeSWITCH版本:1.10.9 日常开发中,会遇到需要在已存在的session上执行定时挂机和取消挂机的情况,今天整理下这方面的内容,我将从以下几个方面进行描述:实验场景环境描述定时挂机描述如何使用定时挂机如何取消定时挂机提供示例代码及运行效果视......
  • FreeSWITCH在session上执行特定dialplan
    操作系统:CentOS7.6_x64 FreeSWITCH版本:1.10.9日常开发中,会遇到需要在已存在的session上执行特定拨号方案的情况,今天整理下这方面的内容,我将从以下几个方面进行描述:实验环境准备基于transfer实现基于execute_extension实现基于transfer和execute_extension实现......
  • 十七、Cookie和Session
    1、Cookie:保存在客户端浏览器文件上的键值对当浏览器访问某个网站时,浏览器在COOKIE中拿出属于该网站的键值对来访问这个网站。因此这些键值对是按域名来保存在本地文件。一、cookie和session的介绍1、cookie不属于http协议范围,由于http协议无法保持状态,但实际情况,我们却又需要......