我想应用基于application.yml属性的默认弹簧安全自动配置。我认为我首先排除了自动配置类,然后将它作为一个导入添加到以该属性为条件的配置类中:
MyApplication.class:
@SpringBootApplication(exclude = {SecurityAutoConfiguration.class})
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}ApplicationProperties.class
@Getter
@Setter
@Configuration
@EnableConfigurationProperties
@ConfigurationProperties(prefix = "myapplication")
public class ApplicationProperties {
private boolean security;
}application.yml:
---
myapplication:
security: trueSecurityConfig.class:
@Configuration
@Import(SecurityAutoConfiguration.class)
@ConditionalOnProperty(prefix = "myapplication", name = "security", havingValue = "true")
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
....
}但是,SecurityAutoConfiguration类从未导入:
Exclusions:
-----------
org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration那我怎样才能达到预期的结果呢?
更新
有趣的是,如果我对KafkaAutoConfiguration.class做了完全相同的工作,正如我所期望的-所有的卡夫卡bean都会被加载和自动配置。
KafkaAutoConfiguration matched:
- @ConditionalOnClass found required class 'org.springframework.kafka.core.KafkaTemplate' (OnClassCondition)
KafkaAutoConfiguration#kafkaAdmin matched:
- @ConditionalOnMissingBean (types: org.springframework.kafka.core.KafkaAdmin; SearchStrategy: all) did not find any beans (OnBeanCondition)
KafkaAutoConfiguration#kafkaConsumerFactory matched:
- @ConditionalOnMissingBean (types: org.springframework.kafka.core.ConsumerFactory; SearchStrategy: all) did not find any beans (OnBeanCondition)
KafkaAutoConfiguration#kafkaProducerFactory matched:
- @ConditionalOnMissingBean (types: org.springframework.kafka.core.ProducerFactory; SearchStrategy: all) did not find any beans (OnBeanCondition)
KafkaAutoConfiguration#kafkaProducerListener matched:
- @ConditionalOnMissingBean (types: org.springframework.kafka.support.ProducerListener; SearchStrategy: all) did not find any beans (OnBeanCondition)
KafkaAutoConfiguration#kafkaTemplate matched:
- @ConditionalOnMissingBean (types: org.springframework.kafka.core.KafkaTemplate; SearchStrategy: all) did not find any beans (OnBeanCondition)
Exclusions:
-----------
org.springframework.boot.autoconfigure.kafka.KafkaAutoConfiguration发布于 2020-12-13 18:28:17
将其中一个添加到您的类中:
如果你想让这个类工作,如果你是SET THE VALUE OF IT和IT IS TRUE的话。
@ConditionalOnProperty(prefix = "myapplication", value = "secured", havingValue = "true", matchIfMissing = false)如果你想让这个类工作,如果你是DO NOT SET THE VALUE IN THE YAML FILE或IT IS SET BUT THE THE VALUE IS FALSE
@ConditionalOnProperty(prefix = "myapplication", value = "secured", havingValue = "false", matchIfMissing = true)因此,例如,如果您想为您的项目使用spring安全性,但有时您希望通过设置myapplication.secured值来关闭它,那么您将有如下所示的类:
您的项目将使用这个类,以防不需要安全性(myapplication.secured可能丢失或设置为false):
@Configuration
@EnableWebSecurity
@ConditionalOnProperty(prefix = "myapplication", value = "secured", havingValue = "false", matchIfMissing = true)
public class NoSpringSecurity extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable();
}
}只有当myapplication.enabled=true在您的application.yaml文件中时,您的项目才会使用它:
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true, jsr250Enabled = true, securedEnabled = true)
@ConditionalOnProperty(prefix = "myapplication", value = "secured", havingValue = "true", matchIfMissing = false)
@RequiredArgsConstructor
public class SpringSecuritz extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
super.configure(http);
http
.csrf()
.disable()
.authorizeRequests()
.antMatchers("/**")
.authenticated();
}https://stackoverflow.com/questions/65272473
复制相似问题