首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于属性的Spring默认自动配置

基于属性的Spring默认自动配置
EN

Stack Overflow用户
提问于 2020-12-13 04:49:08
回答 1查看 647关注 0票数 0

我想应用基于application.yml属性的默认弹簧安全自动配置。我认为我首先排除了自动配置类,然后将它作为一个导入添加到以该属性为条件的配置类中:

MyApplication.class:

代码语言:javascript
复制
@SpringBootApplication(exclude = {SecurityAutoConfiguration.class})
public class MyApplication {

  public static void main(String[] args) {
    SpringApplication.run(MyApplication.class, args);
  }
}

ApplicationProperties.class

代码语言:javascript
复制
@Getter
@Setter
@Configuration
@EnableConfigurationProperties
@ConfigurationProperties(prefix = "myapplication")
public class ApplicationProperties {

  private boolean security;
}

application.yml:

代码语言:javascript
复制
---
myapplication:
  security: true

SecurityConfig.class:

代码语言:javascript
复制
@Configuration
@Import(SecurityAutoConfiguration.class)
@ConditionalOnProperty(prefix = "myapplication", name = "security", havingValue = "true")
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
  ....
}

但是,SecurityAutoConfiguration类从未导入:

代码语言:javascript
复制
Exclusions:
-----------

    org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration

那我怎样才能达到预期的结果呢?

更新

有趣的是,如果我对KafkaAutoConfiguration.class做了完全相同的工作,正如我所期望的-所有的卡夫卡bean都会被加载和自动配置。

代码语言:javascript
复制
   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
EN

回答 1

Stack Overflow用户

发布于 2020-12-13 18:28:17

将其中一个添加到您的类中:

如果你想让这个类工作,如果你是SET THE VALUE OF ITIT IS TRUE的话。

代码语言:javascript
复制
@ConditionalOnProperty(prefix = "myapplication", value = "secured", havingValue = "true", matchIfMissing = false)

如果你想让这个类工作,如果你是DO NOT SET THE VALUE IN THE YAML FILEIT IS SET BUT THE THE VALUE IS FALSE

代码语言:javascript
复制
@ConditionalOnProperty(prefix = "myapplication", value = "secured", havingValue = "false", matchIfMissing = true)

因此,例如,如果您想为您的项目使用spring安全性,但有时您希望通过设置myapplication.secured值来关闭它,那么您将有如下所示的类:

您的项目将使用这个类,以防不需要安全性(myapplication.secured可能丢失或设置为false):

代码语言:javascript
复制
@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文件中时,您的项目才会使用它:

代码语言:javascript
复制
@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();
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65272473

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档