spring security 无法获取登录用户

起因:springboot 2.7.x 升级到 3.5.x

导致 spring security 升级

导致问题原因在于默认持久化改变了

官方文档

https://docs.spring.io/spring-security/reference/6.5/servlet/authentication/session-management.html#requireexplicitsave

解决方案 二选一

改配置 SecurityFilterChain 中加上

复制代码
.securityContext(securityContext -> securityContext
            .requireExplicitSave(false) // 允许自动保存,避免手动操作
        );

代码中保存

复制代码
	// in login controller
    
    @Autowired
    private SecurityContextRepository securityContextRepository;
   
    @PostMapping("/login")
    public ResponseEntity<?> login(@RequestBody LoginRequest req, 
                                   HttpServletRequest request, 
                                   HttpServletResponse response) {
            //...... do login and get auth

            // 创建并设置 SecurityContext
            SecurityContext context = SecurityContextHolder.createEmptyContext();
            context.setAuthentication(auth);
            SecurityContextHolder.setContext(context);

            // 手动保存到 Repository(如 Session)
            securityContextRepository.saveContext(context, request, response);

            return ResponseEntity.ok("Login success");
    }
相关推荐
晨非辰5 小时前
Linux权限管理速成:umask掩码/file透视/粘滞位防护15分钟精通,掌握权限减法与安全协作模型
linux·运维·服务器·c++·人工智能·后端
开发者小天12 小时前
python中For Loop的用法
java·服务器·python
flushmeteor12 小时前
JDK源码-基础类-String
java·开发语言
毕设源码-钟学长13 小时前
【开题答辩全过程】以 基于ssm的空中停车场管理系统为例,包含答辩的问题和答案
java
不愿是过客13 小时前
java实战干货——长方法深递归
java
小北方城市网14 小时前
Redis 分布式锁高可用实现:从原理到生产级落地
java·前端·javascript·spring boot·redis·分布式·wpf
六义义15 小时前
java基础十二
java·数据结构·算法
毕设源码-钟学长16 小时前
【开题答辩全过程】以 基于SpringBoot的智能书城推荐系统的设计与实现为例,包含答辩的问题和答案
java·spring boot·后端
笨手笨脚の16 小时前
深入理解 Java 虚拟机-03 垃圾收集
java·jvm·垃圾回收·标记清除·标记复制·标记整理
莫问前路漫漫16 小时前
WinMerge v2.16.41 中文绿色版深度解析:文件对比与合并的全能工具
java·开发语言·python·jdk·ai编程