因此,我迁移了一个应用程序以使用天蓝色广告进行身份验证。之前,使用 测试了方法安全性@WithMockUser
。例如:
@Test
@WithMockUser
someTestMethod() {
// some test code
}
但是,当我现在尝试运行该应用程序时,出现以下错误:
Field repo in com.azure.spring.cloud.autoconfigure.aad.AadWebSecurityConfigurerAdapter required a bean of type 'org.springframework.security.oauth2.client.registration.ClientRegistrationRepository' that could not be found.
安全配置扩展了 AadWebSecurityConfigurerAdapter,如下所示:
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfig extends AadWebSecurityConfigurerAdapter {
...
}
我认为问题在于安全配置从 AadWebSecurityConfigurerAdapter 扩展。我尝试在以下测试中覆盖它:
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
@Order(1)
public class TestSecurityConfig {
}
没有运气。
我希望能够在不使用 oauth 客户端的情况下运行测试。
我将如何实现这一目标?
@WithMockUser
UsernamePasswordAuthenticationToken
设置不适合 OAuth2 的测试安全上下文:Authentication
实现可能应该是以下之一:JwtAuthenticationToken
(带有JWT解码器的资源服务器)BearerTokenAuthentication
(具有令牌自省的资源服务器,又名“不透明令牌”)OAuth2AuthenticationToken
(客户与oauth2Login
)如果你想使用注释,请参阅我写的这个库。它提供了您需要的注释,并且存储库包含大量工作示例,所有单元和集成都经过测试。
我还为 OAuth2 的
spring-security-test
一些MockMvc
请求后处理器和WebTestClient
变异器做出了贡献。但当然,这些需要使用 或MockMvc
,WebTestClient
因此仅限于测试@Controller
。相反,注释可用于测试任何安全的@Component
(例如@Repository
或@Service
与@PreAuthorize
等)。另外,在我看来,注释使测试更具可读性。有关更多详细信息,您可以参考我已经链接的README 章节或这篇Baeldung 文章(但它有点过时:自从我写它以来,注释已经改进了)。