【问题标题】:Disable/enable OAuth2 without two security configurations在没有两个安全配置的情况下禁用/启用 OAuth2
【发布时间】:2018-11-16 23:52:04
【问题描述】:

我正在开发一个使用 OAuth2 实现 SSO 的 Spring Boot 应用程序。
现在,我正在我的安全配置中使用 @ConditionalOnProperty 注释来在需要时禁用 OAuth2:

@Configuration
@ConditionalOnProperty("some.property")
@Order(SecurityProperties.BASIC_AUTH_ORDER-3)
@EnableOAuth2Sso
public class SecurityConfigurationOAuth2 extends WebSecurityConfigurerAdapter {

当 OAuth 被禁用时,我还使用了第二个安全配置:

@Configuration
@Order(SecurityProperties.BASIC_AUTH_ORDER-2)
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

到目前为止,这是可行的,但我不喜欢有两个几乎相同的配置。唯一需要由属性禁用/启用的是 @EnableOAuth2Sso 注释。

还有其他方法可以实现吗?

【问题讨论】:

    标签: java spring spring-boot spring-security spring-security-oauth2


    【解决方案1】:

    如果确实只有@EnableOAuth2Sso 注释必须启用/禁用,那么您是否有任何理由不能创建另一个只有该注释加上@ConditionalOnProperty 或@Profile 的配置?

    虽然没有经过测试,但您也许可以拥有一个严格用于条件注释的嵌套配置类,如下所示:

    @Configuration
    @Order(SecurityProperties.BASIC_AUTH_ORDER-3)
    public class SecurityConfigurationOAuth2 extends WebSecurityConfigurerAdapter {
      @Configuration
      @ConditionalOnProperty("some.property")  // Or use a profile
      @EnableOAuth2Sso
      static class EnableSSOConfig {
      }
      ....
    }
    

    【讨论】:

    • 是的,它只是@EnableAuth2Sso 注解。这基本上就是我现在正在做的事情,如果我的主要帖子没有传达给你,我很抱歉。问题是我不想使用两种配置,因为 HttpSecurity-object 必须同时维护并且非常广泛。
    • 我并不是建议有两个几乎相同的配置。我建议使用一个始终加载的主要配置,然后再使用另一个专门用于有条件的 @EnableOAuth2Sso 注释。我的代码示例只是为您提供了一个选项,您可以将条件注释保留在安全配置类中,以使事情井井有条。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-10
    • 2020-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多