security.basic.enabled=false
行以禁用该配置文件的所有安全性。现在我正在尝试迁移到新的Spring Boot 2,在那里该配置属性被移除了。在Spring Boot 2.0.x中,如何实现相同的行为(不使用此属性)?我已经阅读了Spring-Boot-Security-2.0和security-changes-in-spring-boot-2-0-m4,但没有关于这个属性的内容。
security.basic.enabled=false
行以禁用该配置文件的所有安全性。现在我正在尝试迁移到新的Spring Boot 2,在那里该配置属性被移除了。在Spring Boot 2.0.x中,如何实现相同的行为(不使用此属性)?你需要添加自定义Spring Security配置,请参考Spring Boot参考指南:
28.1 MVC安全性
默认的安全配置是在
SecurityAutoConfiguration
和UserDetailsServiceAutoConfiguration
中实现的。SecurityAutoConfiguration
为Web安全性导入SpringBootWebSecurityConfiguration
,而UserDetailsServiceAutoConfiguration
则配置了身份验证,在非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
注解。
@Order
。例如,如果您的主要安全配置使用默认配置文件(未指定@Profile
),并且您将dev配置文件添加到另一个配置中,则在使用活动的dev配置文件运行时,Spring将不得不决定哪个配置优先。 - The Gilbert Arenas Dagger这是我最终解决问题的方法。以下是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中已删除security.basic.enabled
(但仍将其保留为属性名),因此我最终使用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();
}
}
@ConditionalOnProperty(prefix = "spring", name = "security.enabled")
,以避免在configure()
内部使用if-else。 - Muzammil在 Spring Boot 2 中,还有另一种禁用安全性的选项。
@EnableAutoConfiguration(exclude = {SecurityAutoConfiguration.class})
@SpringBootApplication(
exclude = { SecurityAutoConfiguration.class,
ManagementWebSecurityAutoConfiguration.class })
public class MySpringBootApplication {
@Configuration
@ConditionalOnProperty(prefix = "security.custom", name = "enabled", havingValue="true")
@EnableWebSecurity
public class CustomWebSecurityConfiguration extends WebSecurityConfigurerAdapter {
Spring Boot 2.1.3
对于特定的配置文件"profile dev"
创建一个新的Spring配置类
@Configuration
@EnableAutoConfiguration(exclude = {SecurityAutoConfiguration.class})
@Profile("dev")
public class WebSecurityConfigDisable {
}
实际上,对于这个问题的某些配置,有几个答案;在我的情况下,我一直在使用Spring Boot 2与Spring Security和JWT进行尝试。为了保护我的REST端点,我需要创建令牌等。在编写代码并尝试测试我的端点以查看JWT是否正常工作后,我最终面临着默认登录页面。我尝试更改上面提到的属性文件,并最终通过将@SpringBootApplication(exclude = {SecurityAutoConfiguration.class} )
注释添加到我的应用程序类来禁用它。
@SpringBootApplication(exclude = {SecurityAutoConfiguration.class} )
public class JwtWithSpringBootApplication {
public static void main(String[] args) {
SpringApplication.run(JwtWithSpringBootApplication.class, args);
}
}
@EnableAutoConfiguration(exclude = {SecurityAutoConfiguration.class, SecurityFilterAutoConfiguration.class})