Spring
SecurityContextHolder
使用ThreadLocal
来存储SecurityContext
,它是线程本地的,不能被其他线程访问或修改。
但是在 spring 文档中,建议设置/创建新的安全上下文而不是使用
SecurityContextHolder.getContext().setAuthentication(authentication)
,因为它可能会导致竞争条件。
我不明白当
SecurityContext
是线程本地时,竞争条件是如何发生的。即使有多个线程同时执行,我也没有看到任何竞争条件发生。
请让我知道为什么在文档中提到它?
我认为 Spring 文档考虑以下原因: