Spring Boot 2.0禁用默认安全性

Jan*_*tze 28 spring-security spring-boot spring-security-rest spring-webflux

我想使用Spring Security进行JWT身份验证.但它带有默认身份验证.我试图禁用它,但是这样做的旧方法 - 禁用它application.properties- 在2.0中已弃用.

这是我试过的:

@Configuration
public class StackWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.httpBasic().disable();
        // http.authorizeRequests().anyRequest().permitAll(); // Also doesn't work.
    }
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能简单地禁用基本安全性?

更新
可能很高兴知道我不使用web mvc而是web flux.

截图:
基本登录表单

Sen*_*Sen 33

根据Spring 2.0中的新更新,如果Spring Security在类路径上,Spring Boot将添加@EnnWebSecurity.So向application.properties添加条目是不行的(即它不再可以这样定制).有关更多信息,请访问官方网站Spring Boot 2.0中的安全性更改

虽然不确定您的要求,我可以想到一个解决方法如下: -

@Configuration
@EnableWebSecurity
public class SecurityConfiguration  extends WebSecurityConfigurerAdapter{
    @Override
    protected void configure(HttpSecurity http) throws Exception{
        http.authorizeRequests().antMatchers("/").permitAll();
    }
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.

  • IMO 这真的比从类路径中删除 spring 安全依赖更好。如果“http.httpBasic().disable().formLogin().disable();”会更好 实际工作。文档说“Spring Boot 现在有一个单一的行为,只要你添加你自己的 WebSecurityConfigurerAdapter 就会退出。” 但这似乎是一个错误的陈述。我有一个 WebSecurityConfigurerAdapter 以及“http.httpBasic().disable().formLogin().disable();” 我仍然得到那个愚蠢的 spring 登录页面。真气人。 (2认同)

Bri*_*zel 13

根据参考文档,允许使用WebFlux的所有请求的安全配置应如下所示:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.web.server.ServerHttpSecurity;
import org.springframework.security.web.server.SecurityWebFilterChain;

@Configuration
public class SecurityConfig {

    @Bean
    public SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http) {
        http.authorizeExchange().anyExchange().permitAll();
        return http.build();
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 这不起作用,因为它现在抱怨Missing Bean"ServerHttpSecurity" (3认同)

Int*_*uff 13

从Spring Boot 2.1开始,如果包含spring-boot-actuator,仅排除SecurityAutoconfiguration就不再足够了,还需要排除ManagementWebSecurityAutoConfiguration,如下所示:

@SpringBootApplication(exclude = { SecurityAutoConfiguration.class, ManagementWebSecurityAutoConfiguration.class })
Run Code Online (Sandbox Code Playgroud)

  • 只要我使用 @EnableWebSecurity 注释,这个答案对我就不起作用(Spring Boot 2.1.5,spring-security-web 4.2.3.RELEASE)。您还需要做其他事情吗? (2认同)
  • 如果您想排除 AutoConfiguration,我相信您将无法使用 @EnableWebSecurity,并且您将需要自己配置所需的 spring 安全 bean,就像使用普通 Spring/不使用 Spring boot 一样。 (2认同)

dav*_*avo 11

这对我有用:

@Configuration
public class SecurityConfig  extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable().authorizeRequests().anyRequest().permitAll();
    }
}
Run Code Online (Sandbox Code Playgroud)


hel*_*lmy 11

您可以在Application类中添加/修改以下内容:

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

}
Run Code Online (Sandbox Code Playgroud)


Aub*_*ine 7

添加一些新的答案,我假设所有都使用执行器,如果不是,我打赌一类排除应该足够了,我设法通过属性禁用:

spring:
  autoconfigure:
    exclude: ${spring.autoconfigure.sac}, ${spring.autoconfigure.mwsas}
    sac: org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration
    mwsas: org.springframework.boot.actuate.autoconfigure.security.servlet.ManagementWebSecurityAutoConfiguration
Run Code Online (Sandbox Code Playgroud)

我通过属性引用了两个自动配置类以保持长度完整(请注意,如果您像这样引用它,IntelliJ Ultimate 会哭,因为它不知道这些占位符值是什么以及它们是否实际上是合法的类,因此内联如果这让你很烦恼)。

然而,应用程序不会像所声称的那样无法启动:

https://www.baeldung.com/spring-boot-security-autoconfiguration

如果你只是禁用SecurityAutoConfiguration

如果它确实有效,您将不再看到自动生成的密码,并且它比接受的答案稍微不那么混乱,因为读取日志的开发人员不会因基本身份验证的生成密码而感到困惑,而安全性允许一切。

为什么仅仅禁用主自动配置类还不够,是因为这个家伙:

@Configuration
class ManagementWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .requestMatchers(
                        EndpointRequest.to(HealthEndpoint.class, InfoEndpoint.class))
                .permitAll().anyRequest().authenticated().and().formLogin().and()
                .httpBasic();
    }

}
Run Code Online (Sandbox Code Playgroud)

为了分割执行器和安全配置,我们做了大量的工作,这让我们所有人都感到困惑,现在它变得更加简单,但像这样的工件仍然存在。如果我错了,Spring 开发人员会纠正我:-)。