动态加载配置 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.
您可以根据系统属性创建自定义条件。
您也可以使用 if 来完成它,但它的可读性较差,并且会聚集您的配置,但举一个简短的例子,试试这个:
@Bean
public SecurityConfig basicConfig(@Value("${authentication.type.oauth}" boolean isOauthEnabled)){
if(isOauthEnabled){
return new ResourceServerSecurityConfig();
}else{
return new BasicSecurityConfig ();
}
}
然而,这是一个肮脏的 hack。
我正在制作一个 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.
您可以根据系统属性创建自定义条件。
您也可以使用 if 来完成它,但它的可读性较差,并且会聚集您的配置,但举一个简短的例子,试试这个:
@Bean
public SecurityConfig basicConfig(@Value("${authentication.type.oauth}" boolean isOauthEnabled)){
if(isOauthEnabled){
return new ResourceServerSecurityConfig();
}else{
return new BasicSecurityConfig ();
}
}
然而,这是一个肮脏的 hack。