我在使用基于无状态令牌的身份验证时,发现了一些奇怪的行为。这个rest API是使用Spring Boot编写的。客户端在每个请求中都会包含一个JWT令牌,并且我编写了一个自定义过滤器来扩展GenericFilterBean,根据令牌中的声明添加Authentication对象到安全上下文中,方法如下:
然而,当我开发的简单应用执行一系列操作时,有时会发现安全上下文没有被正确设置 - 对于已提供令牌的请求,有时为null。过滤器被正确调用,setAuthencation()也被调用,但请求无法通过身份验证,并抛出403拒绝访问。
如果我明确关闭任何http会话管理,将会话创建策略设置为STATELESS,则这种行为停止。
这里可能发生了什么?安全上下文在处理请求的线程之间共享吗?
SecurityContextHolder.getContext().setAuthentication(authentication);
在处理请求后,通过执行以下操作来清除上下文:
SecurityContextHolder.getContext().setAuthentication(null);
然而,当我开发的简单应用执行一系列操作时,有时会发现安全上下文没有被正确设置 - 对于已提供令牌的请求,有时为null。过滤器被正确调用,setAuthencation()也被调用,但请求无法通过身份验证,并抛出403拒绝访问。
如果我明确关闭任何http会话管理,将会话创建策略设置为STATELESS,则这种行为停止。
这里可能发生了什么?安全上下文在处理请求的线程之间共享吗?