动态加载配置Bean

时间:2016-05-16 16:28:03

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

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

问题是,如果我使用@configuration创建了两个类,那么应用程序就无法启动,如果我只留下一个并且在configure方法中,我添加一个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;
    }
}

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

2 个答案:

答案 0 :(得分:1)

您需要的是条件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 ();
    }
}

然而,这是一个肮脏的黑客。

答案 1 :(得分:0)

您是否在Spring Boot Application中定义了注释@SpringBootApplication

请参阅以下示例:

@SpringBootApplication
public class Application {

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

}

此外,您可以将@Import({ApplicationConfig.class})注释到主应用程序。