动态加载配置 Bean

Load Configuration Bean Dynamically

我正在制作一个 spring 启动应用程序,它需要基本身份验证或 Oauth2,具体取决于我定义的 属性。

问题是如果我用@configuration 创建了两个 类 应用程序不会启动,如果我只留下一个并在配置方法中添加一个 if 来配置 HttpSecurity 对象我会失败当尝试使用基本身份验证访问端点时。

我尝试用这种方式动态注册bean:

@Bean
public ResourceServerSecurityConfig oauthConfig(){
    if(isOauthEnabled){
        return new ResourceServerSecurityConfig();
    }else{
        return null;
    }
}
@Bean
public BasicSecurityConfig basicConfig(){
    if(isOauthEnabled){
        return new BasicSecurityConfig ();
    }else{
        return null;
    }
}

但是没有加载配置。 关于如何存档的任何提示??

您是否在 Spring 引导应用程序中定义了注释 @SpringBootApplication

请看下面的示例:

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        .......
        }
    }

}

您也可以在主应用程序中注释@Import({ApplicationConfig.class})

您需要的是有条件的 bean 创建。尝试使用@Conditional.

http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/context/annotation/Conditional.html

您可以根据系统属性创建自定义条件。

您也可以使用 if 来完成它,但它的可读性较差,并且会聚集您的配置,但举一个简短的例子,试试这个:

@Bean
public SecurityConfig basicConfig(@Value("${authentication.type.oauth}" boolean isOauthEnabled)){
    if(isOauthEnabled){
        return new ResourceServerSecurityConfig();
    }else{
        return new BasicSecurityConfig ();
    }
}

然而,这是一个肮脏的 hack。