Spring Boot 2.0.x禁用某些配置文件的安全性

时间:2018-03-13 14:28:05

标签: java spring-boot spring-security

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

我已经阅读了Spring-Boot-Security-2.0security-changes-in-spring-boot-2-0-m4,但这个属性没有任何内容。

7 个答案:

答案 0 :(得分:11)

您必须添加自定义Spring Security配置,请参阅Spring Boot Reference Guide

  

28.1 MVC安全性

     

默认安全配置在SecurityAutoConfigurationUserDetailsServiceAutoConfiguration中实施。 SecurityAutoConfiguration为网络安全导入SpringBootWebSecurityConfigurationUserDetailsServiceAutoConfiguration配置身份验证,这在非Web应用程序中也很相关。要完全关闭默认Web应用程序安全配置,您可以添加WebSecurityConfigurerAdapter类型的bean(这样做不会禁用UserDetailsService配置或Actuator的安全性)。

例如:

@Configuration
public class ApplicationSecurity extends WebSecurityConfigurerAdapter {

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

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

答案 1 :(得分:4)

以下是我最终解决问题的方法。以下是我的安全配置在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();
    }
}

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

@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();
    }
}

答案 2 :(得分:2)

还有一个选项可以在Spring Boot 2中禁用安全性

@EnableAutoConfiguration(exclude = {SecurityAutoConfiguration.class})

将此添加到主类上

答案 3 :(得分:0)

实际上这个问题的某些配置有几个答案;在我的情况下,我一直在使用Spring Security和JWT玩Spring Boot 2。为了保护我的REST端点,我需要创建令牌等。在我编写代码并尝试测试我的端点以查看JWT是否正常工作之后,我最终面临默认登录页面。我尝试更改上面提到的属性文件,最后通过将 @SpringBootApplication(exclude = {SecurityAutoConfiguration.class} ) 注释添加到我的应用程序类来禁用它。

@SpringBootApplication(exclude = {SecurityAutoConfiguration.class} )
public class JwtWithSpringBootApplication {

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

答案 4 :(得分:0)

在springboot 2.1.4中,我必须这样做

@EnableAutoConfiguration(exclude = {SecurityAutoConfiguration.class, SecurityFilterAutoConfiguration.class})

答案 5 :(得分:0)

Spring Boot 2.1.3

对于特定配置文件“ dev”

创建一个新的Spring Configuration类

@Configuration
@EnableAutoConfiguration(exclude = {SecurityAutoConfiguration.class})
@Profile("dev")
public class WebSecurityConfigDisable  {

}

这将禁用弹簧安全性。

答案 6 :(得分:0)

您可以通过排除 SecurityAutoConfiguration.classManagementWebSecurityAutoConfiguration.class 来禁用 spring 安全自动配置获得 spring-boot-actuator 依赖时排除

@SpringBootApplication(
exclude = { SecurityAutoConfiguration.class,  
            ManagementWebSecurityAutoConfiguration.class })
public class MySpringBootApplication {

然后您可以使用类似这样的配置文件或配置参数有条件地配置您的自定义 WebSecurityConfigurerAdapter

@Configuration
@ConditionalOnProperty(prefix = "security.custom", name = "enabled", havingValue="true")
@EnableWebSecurity
public class CustomWebSecurityConfiguration extends WebSecurityConfigurerAdapter {