线程中的 spring 安全当前用户

标签 spring multithreading spring-security

嗨,我在线程范围内使用 Spring Security 时遇到了一些问题

System.out.println(((User) SecurityContextHolder.getContext().getAuthentication().getPrincipal()).getId());
new Thread(() -> System.out.println(((User) SecurityContextHolder.getContext().getAuthentication().getPrincipal()).getId())).start();

这两行应该给我当前的用户 ID

第一行按预期工作

第二行给我 NullPointerException 因为没有当前用户它是空值

我发现了这个问题,因为我想将许多行保存到歌曲表中,并且它包含 @CreatedBy 用户,这将要求线程中的当前用户并且会失败,因为这将为当前用户提供空值

最佳答案

如果你想让生成的线程继承父线程的 SecurityContext,你应该设置 MODE_INHERITABLETHREADLOCAL 策略。SecurityContextHolder.setStrategyName(SecurityContextHolder.MODE_INHERITABLETHREADLOCAL)有一个 issue ,当它与线程池一起使用时。这似乎是固定的。

关于线程中的 spring 安全当前用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42341635/

相关文章:

spring - Spring Websocket 中的请求或 session 范围

python - 处理来自多个进程的单个文件

c# - C# += 线程安全吗?

java - 列表中的 Spring Security ACL

java - 使用 Spring Security 进行身份验证后如何根据角色进行重定向

spring - 自定义错误页面 + spring security 3 + hasPermission

java - cloudbess部署应用后出现内部错误如何解决

java - 我如何在 Spring 中将 AOP 建议应用于 ConstraintValidator<A,T>?

java - 使用 lambda 的类似函数的设计模式

c# - 什么时候使用 [MTAThread]?