【发布时间】:2019-08-30 11:29:24
【问题描述】:
我正在使用 graphql-java,它在不同的线程中执行不同的嵌套解析器。
我有一个关于 Spring Security 的自定义过滤器,它从 Authorization Header 中解析 Bearer 令牌并将其添加到当前的 Spring Security 上下文中。
我暂时能够通过侦听 ContextRefreshedEvent 并将策略强制为 Global 来解决问题,如您在此处看到的:
@EventListener
fun setupSecurityContext(event: ContextRefreshedEvent) {
SecurityContextHolder.setStrategyName(SecurityContextHolder.MODE_GLOBAL)
}
我对这个解决方案不满意,因为当我想接收作为解析器上的参数传递的令牌时,我必须通过全局静态调用访问解析器上的令牌。
SecurityContextHolder.getContext().authentication.principal
我认为这不是一个好习惯。我猜一个请求的数据可能会被不同的线程暴露给另一个用户。
【问题讨论】:
标签: java spring kotlin spring-security graphql-java