我正在制作一个需要基本身份验证或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;
}
}
但是没有加载配置。 关于如何存档的任何提示??
答案 0 :(得分:1)
您需要的是条件bean创建。尝试使用@Conditional。
您可以根据系统属性创建自定义条件。
您也可以使用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})
注释到主应用程序。