Spring boot 如何禁用Okta自动配置进行测试?
我正在使用,但无法禁用集成测试的自动配置。通常,您会这样做:Spring boot 如何禁用Okta自动配置进行测试?,spring-boot,spring-security,okta,Spring Boot,Spring Security,Okta,我正在使用,但无法禁用集成测试的自动配置。通常,您会这样做: @SpringBootTest @EnableAutoConfiguration(exclude={SecurityAutoConfiguration.class,OktaOAuth2AutoConfig.class}) 类应用程序测试{ @试验 void contextLoads(){ } } 但是,OktaOAuth2AutoConfig类受包保护,您不能禁用它。我尝试过组件扫描过滤器和一系列其他技术,但问题是它仍然在加载并需要
@SpringBootTest
@EnableAutoConfiguration(exclude={SecurityAutoConfiguration.class,OktaOAuth2AutoConfig.class})
类应用程序测试{
@试验
void contextLoads(){
}
}
但是,OktaOAuth2AutoConfig类受包保护,您不能禁用它。我尝试过组件扫描过滤器和一系列其他技术,但问题是它仍然在加载并需要
okta.oauth2.issuer
(以及客户端id和secret),并调用它以确保它是有效的oauth2提供程序。如果测试必须在自动配置无法调用颁发者的地方运行,我不希望使用此功能。有什么想法吗?你应该能够模仿事情,这样OIDC发现就可以发生了。我将在中演示如何为JHipster应用程序执行此操作。由于您使用的是Okta Spring Boot starter,我猜您可以这样做
TestSecurityConfiguration.java
类@TestConfiguration
公共类TestSecurityConfiguration{
私人最终客户登记客户登记;
public TestSecurityConfiguration(){
this.clientRegistration=clientRegistration().build();
}
@豆子
ClientRegistrationRepository ClientRegistrationRepository(){
返回新的InMemoryClientRegistrationRepository(clientRegistration);
}
private ClientRegistration.Builder ClientRegistration(){
映射元数据=新建HashMap();
metadata.put(“结束会话终结点”)https://example.org/logout");
return ClientRegistration.withRegistrationId(“okta”)
.redirectUriTemplate(“{baseUrl}/{action}/oauth2/code/{registrationId}”)
.clientAuthenticationMethod(clientAuthenticationMethod.BASIC)
.authorizationGrantType(authorizationGrantType.AUTHORIZATION\U代码)
.scope(“读取:用户”)
.authorizationUri(“https://example.org/login/oauth/authorize")
.tokenUri(“https://example.org/login/oauth/access_token")
.jwkSetUri(“https://example.org/oauth/jwk")
.userInfoUri(“https://api.example.org/user")
.providerConfigurationMetadata(元数据)
.userNameAttributeName(“id”)
.客户名称(“客户名称”)
.clientId(“客户id”)
.客户机密(“客户机密”);
}
@豆子
JwtDecoder JwtDecoder(){
返回mock(JwtDecoder.class);
}
@豆子
公共OAuth2AuthorizedClient服务AuthorizedClient服务(ClientRegistrationRepository ClientRegistrationRepository){
返回新的InMemoryAuth2AuthorizedClient服务(clientRegistrationRepository);
}
@豆子
公共OAuth2AuthorizedClient存储授权客户端存储(OAuth2AuthorizedClient服务授权客户端服务){
返回新的AuthenticatedPrincipalAuth2AuthorizedClient存储(AuthorizedClient服务);
}
}
然后在使用@SpringBootTest
的类中,将该类配置为配置源
@SpringBootTest(类={YourMainApp.class,TestSecurityConfiguration.class})
另一篇博文,有一些关于模拟API进行测试的附加信息。具体请参见。谢谢,伙计。你的博客文章非常有用。我想在完全理解正在发生的事情之前,我有办法理解OAuth2,但是通过该测试配置,我可以从application.properties中删除Okta配置以进行测试。我想这就是我要寻找的,但也许在更多的研究之后,我可以把事情弄清楚。在以“必须更简单”的心态浏览了无数的互联网资源后,我接受了你的解决方案,这是我唯一能够离线工作的解决方案。