经过一段时间的调试,我发现@WithUserDetails
和@WithMockUser
伪造了SecurityContext
,但是没有添加任何伪造的Authentication Provider
,因此在与生产代码
SecurityContextHolder
中填充了包含我们的虚拟SecurityContext
对象的假Authentication
发生过滤器,并且所有产品认证系统都会失败,因为AbstractUserDetailsAuthenticationProvider
中没有多余的ProviderManager
,并且在出现最后错误时,SecurityContext
也已清除,因此我放弃了测试模拟身份验证设置...
所以..有什么内置方法可以在生产授权代码上使用测试方便的@With
..注释?是虫子吗?我可以更改先前项目符号的顺序,以便至少在以后进行测试准备吗?
答案 0 :(得分:1)
正确,@WithUserDetails
和@WithMockUser
适用于希望模拟已通过身份验证的请求。
因此,所有进行身份验证的过滤器都不应在此时触发。如果您要触发过滤器,则可以在已经进行身份验证的情况下重写过滤器以解决用例。
另一种选择是重写测试以按照应用程序期望的方式进行身份验证。