首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么SecurityContextHolder.getContext().authentication在Kotlin异步方法中变得等于null?

在Kotlin异步方法中,SecurityContextHolder.getContext().authentication变为null的原因可能是由于上下文切换导致的。异步方法通常会在不同的线程中执行,而线程切换可能会导致上下文丢失。

在Spring Security中,SecurityContextHolder是用于存储当前用户的安全上下文的。authentication属性是存储在SecurityContext中的,表示当前用户的身份验证信息。当异步方法被调用时,可能会导致线程切换,从而导致SecurityContext无法正确地传递到异步方法中。

为了解决这个问题,可以使用SecurityContextPropagation类来传递SecurityContext。该类提供了一种将SecurityContext传递给异步方法的机制。你可以使用SecurityContextPropagation类的静态方法来创建一个可传递的SecurityContext,并在异步方法中使用它。

另外,还可以考虑使用@Async注解来标记异步方法,并配置合适的TaskExecutor来执行异步任务。这样可以确保异步方法在同一个线程中执行,从而避免上下文丢失的问题。

需要注意的是,以上解决方案是基于Spring框架的,如果你使用的是其他框架或技术栈,可能需要根据具体情况进行相应的调整。

关于腾讯云相关产品和产品介绍链接地址,由于要求不能提及具体的云计算品牌商,我无法提供具体的链接地址。但你可以通过访问腾讯云官方网站,查找与安全相关的产品和解决方案,以满足你的需求。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

深入理解Spring Security授权机制原理

springboot+security+jwt框架,通过一系列内置或者自行定义的过滤器Filter来达到权限控制,如何设置自定义的过滤器Filter呢?...这样配置后,当请求过来时,会自动被JwtFilter类拦截,这时,将执行重写的doFilterInternal方法SecurityContextHolder.getContext().setAuthentication...可以DefaultSecurityFilterChain类根据输出相关log或者debug来查看Security都有哪些过滤器,如在DefaultSecurityFilterChain类的构造器打断点...authentication = SecurityContextHolder.getContext() 3 .getAuthentication(); 4 if (authentication.isAuthenticated...(authentication); 10 return authentication; 11 } 认证过程通过后,执行SecurityContextHolder.getContext().setAuthentication

2.4K20

松哥手把手带你捋一遍 Spring Security 登录流程

为什么想和大家捋一捋 Spring Security 登录流程呢?这是因为之前小伙伴们的一个提问:如何在 Spring Security 动态修改用户信息?...2.登录流程 Spring Security ,认证与授权的相关校验都是一系列的过滤器链完成的,在这一系列的过滤器链,和认证相关的过滤器就是 UsernamePasswordAuthenticationFilter.../密码出来,提取方式就是 request.getParameter ,这也是为什么 Spring Security 默认的表单登录要通过 key/value 的形式传递参数,而不能传递 JSON 参数...= null) { copyDetails(authentication, result); break; } } if (result == null && parent !...最后 postAuthenticationChecks.check 方法检查密码是否过期。

1.5K31

Spring Security ,我就想从子线程获取用户登录信息,怎么办?

为什么它就可以支持从子线程获取数据呢?今天松哥就来和大家聊一聊这个话题。...这个问题搞懂了,就理解了为什么 Spring Security ,只要我们稍加配置,就可以子线程获取到当前登录用户信息。...同一个线程,一个 ThreadLocal 只能保存一个对象,如果需要保存多个对象,就需要多个 ThreadLocal,同一个线程的多个 ThreadLocal 最终所保存的变量实际上同一个 ThreadLocalMap...= SecurityContextHolder.getContext().getAuthentication(); String name = authentication.getName()...authentication = SecurityContextHolder.getContext().getAuthentication(); String name = authentication.getName

4.4K30

简单看下最近的Spring Secrurity、Spring漏洞(CVE-2024-22234、CVE-2024-22243)

)` ,若Authenticationnull,则方法会永远返回真,从而产生一些与预期相反的结果。... Spring Security ,可以使用这个方法来确定用户是否已经进行了完整的身份验证。...authentication = SecurityContextHolder.getContext().getAuthentication(); System.out.println(...Authentication信息或通过异步处理导致异步线程没有可用的信息getAuthentication()返回null, 则会导致认证校验的失效,我们这里为了复现就手动置为null, boolean...试下UriComponentsBuilder可不可以: 很明显,在这个方法,直接这么用是不行的,但根据漏洞的修复删除的正则表达式符号来看,我们userinfo最后增加一个[,测试一下 成功绕过: 不过这样绕过后大部分情况下不能直接使用原

1.6K10

Spring Security---用户名密码登录流程源码解析

---- 登录流程 Spring Security ,认证与授权的相关校验都是一系列的过滤器链完成的,在这一系列的过滤器链,和认证相关的过滤器就是 UsernamePasswordAuthenticationFilter.../密码出来,提取方式就是 request.getParameter ,这也是为什么 Spring Security 默认的表单登录要通过 key/value 的形式传递参数,而不能传递 JSON 参数...最后 postAuthenticationChecks.check 方法检查密码是否过期。...判断用户是否缓存存在,如果不存在,就放入缓存 接下来有一个 forcePrincipalAsString 属性,这个是是否强制将 Authentication 的 principal 属性设置为字符串...最后大家还看到有一个 successHandler.onAuthenticationSuccess,这就是我们 SecurityConfig 配置登录成功回调方法,就是在这里被触发的 当认证失败时,

86010
领券