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配置以进行测试。我想这就是我要寻找的,但也许在更多的研究之后,我可以把事情弄清楚。在以“必须更简单”的心态浏览了无数的互联网资源后,我接受了你的解决方案,这是我唯一能够离线工作的解决方案。