Spring Boot 2.0.x 禁用特定配置文件的安全性

2022-09-03 04:46:51

在Spring Boot 1.5.x中,我配置了安全性,在某些配置文件(例如本地)中,我已将行添加到.properties文件中以禁用该配置文件的所有安全性。我正在尝试迁移到新的Spring Boot 2,其中该配置属性被删除。如何在Spring Boot 2.0.x中实现相同的行为(不使用此属性)?security.basic.enabled=false

我已经阅读了Spring-Boot-Security-2.0和安全-changes-in-spring-boot-2-0-m4,并且没有关于此属性的任何信息。


答案 1

您必须添加自定义的 Spring 安全配置,请参阅 Spring Boot 参考指南

28.1 MVC 安全

缺省安全性配置在 和 中实现。 导入 Web 安全性并配置身份验证,这在非 Web 应用程序中也相关。要完全关闭默认的 Web 应用程序安全性配置,可以添加一个 bean 类型(这样做不会禁用配置或执行器的安全性)。SecurityAutoConfigurationUserDetailsServiceAutoConfigurationSecurityAutoConfigurationSpringBootWebSecurityConfigurationUserDetailsServiceAutoConfigurationWebSecurityConfigurerAdapterUserDetailsService

例如:

@Configuration
public class ApplicationSecurity extends WebSecurityConfigurerAdapter {

    @Override
    public void configure(WebSecurity web) throws Exception {
        web
           .ignoring()
               .antMatchers("/**");
    }
}

要将配置仅用于概要文件,请将@Profile添加到类中。如果要按属性启用它,请将 ConditionalOnProperty 添加到类中。


答案 2

以下是我最终解决问题的方式。以下是我的安全配置在Spring Boot 1.5.x中的外观示例。安全被禁用与财产:security.basic.enabled=false

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring().antMatchers("/upload/**");
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable().authorizeRequests()
                .anyRequest().authenticated()
                .and().httpBasic();
    }
}

由于在Spring Boot 2中被删除(但仍保留为属性名称),我最终将其用作自定义属性。以下是我的配置在Spring Boot 2中的外观示例:security.basic.enabledsecurity.enabled

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Value("${security.enabled:true}")
    private boolean securityEnabled;

    @Override
    public void configure(WebSecurity web) throws Exception {
        if (securityEnabled)
            web.ignoring().antMatchers("/upload/**");
        else
            web.ignoring().antMatchers("/**");
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        if (securityEnabled)
            http.csrf().disable().authorizeRequests()
                    .anyRequest().authenticated()
                    .and().httpBasic();
    }
}

推荐