背景: 我正在使用Spring Security。我已经实现了自定义身份验证提供程序和身份验证。我还捆绑了一个自定义的JWT过滤器(在BasicAuthenticationFilter之前)。
过滤器检查JWT是否有效,然后将令牌中的ID放入自定义身份验证中。
自定义身份验证提供程序使用与身份验证对象中的ID绑定的用户来填充身份验证对象。
均未将身份验证对象的authenticated字段设置为true。
问题1: 在spring安全链中,谁负责设置认证对象的authenticated字段?为什么未对身份验证对象进行“身份验证”,请求就被接受并传递到控制器中?
问题2: 有时,在设置了身份验证的用户字段(使用有效用户)之后,从自定义身份验证中获取用户将导致null。这怎么可能?我可以登录身份验证并看到用户已设置并且有效,但是在某些情况下,以下调用将导致null:
MyAuthentication authentication = (MyAuthentication)SecurityContextHolder.getContext().getAuthentication();
User user = authentication.getUser();
问题不是特定于用户的。任何想法都欢迎。