Spring Boot Security禁用安全性


93

当我使用security.basic.enabled = false禁用具有以下依赖关系的Spring Boot项目上的安全性时:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>com.oracle</groupId>
        <artifactId>ojdbc6</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>

我看到以下异常:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.boot.actuate.autoconfigure.ManagementSecurityAutoConfiguration$ManagementWebSecurityConfigurerAdapter': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire method: public void org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter.setObjectPostProcessor(org.springframework.security.config.annotation.ObjectPostProcessor); nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.springframework.security.config.annotation.ObjectPostProcessor] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}

为了解决此异常,我必须添加属性-management.security.enabled = false。我的理解是,当执行器位于类路径中时,security.basic.enabled = falsemanagement.security.enabled = false都应设置为禁用安全性。

如果我的理解是错误的,请让我知道吗?


1
如果只想禁用所有功能,为什么在类路径上需要安全性?无论如何,您的堆栈跟踪是不完整的,因此无法知道是什么原因阻止了该应用程序的启动。我希望它会启动,但是执行器端点应该保持安全,直到您明确打开它们为止。
Dave Syer 2014年

@DaveSyer我想暂时禁用安全性,我的应用程序代码也引用安全性jar来工作。
Stackee007

您仍然没有发布足够的信息来查看应用程序为何无法启动。完整的堆栈跟踪将是一个开始。
Dave Syer

2
@DaveSyer一个原因是微服务管理spring-sec-oauth2 ClientDetails。您将获得spring-security的传递性导入,但也许您不想在服务中使用基本身份验证。
Dirk Lachowski

Answers:


79

创建application-dev.properties包含以下内容的文件似乎也可以正常工作:

security.basic.enabled=false
management.security.enabled=false

然后,如果您使用dev配置文件启动Spring Boot应用程序,则无需登录。


1
如果您使用management.security.enabled = false禁用安全性,则不需要security.basic.enabled = false
hennr

我还添加security.ignored=/**然后工作。stackoverflow.com/a/36280413/3291867
mojtab23

11
现在已弃用!
Eagle_Eye

6
确实。请参阅spring.io/blog/2017/09/15/…,以获取有关在Spring Boot 2中发生的弃用的更多信息
Wim Deblauwe,

73

如果您的包装中装有spring-boot-actuator,则应添加以下内容

@EnableAutoConfiguration(exclude = {
        org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration.class,
        org.springframework.boot.actuate.autoconfigure.ManagementWebSecurityAutoConfiguration.class})

在较早的Spring-boot中,该类称为ManagementSecurityAutoConfiguration

在较新的版本中,它已更改为

@SpringBootApplication(exclude = {
        org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class,
        org.springframework.boot.actuate.autoconfigure.security.servlet.ManagementWebSecurityAutoConfiguration.class}
        )

39

如果您需要安全性作为依赖项,但又不想让Spring Boot为您配置它,则可以使用以下排除方法:

    @EnableAutoConfiguration(exclude = { 
        org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration.class 
    })

24

对于Spring Boot 2application.yml配置中不推荐使用以下属性

  security.basic.enabled: false
  management.security.enabled: false

要为Sprint Boot 2 Basic + Actuator Security禁用安全性,可以在application.yml文件中使用以下属性,而不是基于注释的排除 (@EnableAutoConfiguration(exclude = {SecurityAutoConfiguration.class,ManagementWebSecurityAutoConfiguration.class}))

  spring:
    autoconfigure:
      exclude[0]: org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration
      exclude[1]: org.springframework.boot.actuate.autoconfigure.security.servlet.ManagementWebSecurityAutoConfiguration

对于application.properties语法就像

spring.autoconfigure.exclude[0]=org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration

21

对于Spring Boot 2用户,必须

@EnableAutoConfiguration(exclude = {
    org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class
})

1
Spring Boot 2.0中的ManagementWebSecurityAutoConfiguration发生了什么
Viyaan Jhiingade '18

你可能还是得你的评论@EnableWebSecurity注释
维克多佩蒂特

11

步骤1:在安全性配置中注释@EnableWebSecurity注释

//@EnableWebSecurity

步骤2:将其添加到application.properties文件。

security.ignored=/**
spring.security.enabled=false
management.security.enabled=false
security.basic.enabled=false

有关更多详细信息,请访问此处:http : //codelocation.com/how-to-turn-on-and-off-spring-security-in-spring-boot-application/


可悲的是,这不起作用。一旦启动spring-boot,它将创建默认的安全过滤器链:2020-11-29 18:48:58.095 INFO 30744 --- [restartedMain] ossweb.DefaultSecurityFilterChain:创建过滤器链:任何请求,[org.springframework]。 security.web.context.request.async.WebAsyncManagerIntegrationFilter@7c9e4dd,org.springframework.security.web.context.SecurityContextPersistenceFilter@1d14d528,org.springframework.security.web.header.HeaderWriterFilter@3fc159ad,org.springframework.security.web。 csrf.CsrfFilter@71b72226,org.springframework.security ....
Ville Miekk-oja

6

如果您@WebMvcTest在测试课程中使用注释

@EnableAutoConfiguration(exclude = { SecurityAutoConfiguration.class, ManagementWebSecurityAutoConfiguration.class })
@TestPropertySource(properties = {"spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration"})

对你没有帮助。

您可以在此处禁用安全性

@WebMvcTest(secure = false)

5

将以下课程添加到您的代码中

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

/**
 * @author vaquar khan
 */
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {

        http.authorizeRequests().antMatchers("/**").permitAll().anyRequest().authenticated().and().csrf().disable();
    }

}

和insie的application.properties添加

security.ignored=/**
security.basic.enabled=false
management.security.enabled=false

4

答案是要允许WebSecurityConfigurerAdapter中的所有请求如下。

您可以在现有班级或新班级中执行此操作。

@Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests().anyRequest().permitAll();
    }

请注意:如果该类是现有的GlobalMethodSecurityConfiguration类,则必须禁用它。


没用。但是,这一个为我工作stackoverflow.com/questions/23894010/...
拉维MCA

嗨,拉维,根据您的解决方案,建议不要在生产环境中以“ http.csrf.disable()”禁用csrf。您收到POST等呼叫的CSRF问题了吗?
U_R_Naveen UR_Naveen

3

允许使用antMatchers(“ /”)访问所有内容

     protected void configure(HttpSecurity http) throws Exception {
            System.out.println("configure");
                    http.csrf().disable();
                    http.authorizeRequests().antMatchers("/").permitAll();
        }

问题在于,访问权限和安全性不是一回事。您也许可以允许访问所有内容,但这并不能阻止安全性。例如,仍然会发现恶意的字符串。
Ville Miekk-oja

3

我只是简单地添加security.ignored=/**application.properties,就完成了魅力。


因此,这意味着自动安全机制仍然存在,但只是忽略了所有路径。我会不愿意保留不需要的东西
Paramvir Singh Karwal,

2

为了避免安全性,您可以使用注释。在configure类的顶部使用此注释:

@EnableWebSecurity

例如:

@EnableWebSecurity
@Configuration
public class AuthFilter{
   // configured method 
}

17
为什么要@EnableWebSecurity禁用网络安全?
lilalinux

至少,它会禁用Spring Boot中的默认安全配置
amseager

2

您需要将此条目添加到application.properties以绕过Springboot默认安全性

spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration

这样就不会有任何身份验证框。otrws,凭据为:- user99b962fa-1848-4201-ae67-580bdeae87e9 (随机生成的密码)

Note: my springBootVersion = '1.5.14.RELEASE'


没有这个,security.basic.enabled = false management.security.enabled = false security.ignored = / **还不够吗?
Bilgehan

2

您可以按照以下2个步骤配置以在项目中切换spring安全性

步骤1:@ConditionalOnProperty在SecurityConfig类的顶部 添加注释。请参阅以下内容:

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity (prePostEnabled = true)
@ConditionalOnProperty (name = "myproject.security.enabled", havingValue = "true", matchIfMissing = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
   // your security config
}

步骤2: 将以下配置添加到您的application.propertiesapplication.yml文件中。

application.properties

security.ignored=/**
myproject.security.enabled=false

要么

application.yml

security:
  ignored: /**

myproject:
  security:
    enabled: false

是否可以仅使用一个属性?
wakedeer

@wakedeer您的评论似乎含糊,请您详细说明一下?
Sahil Chhabra

我的意思是说security.ignored = / **是没有必要的
唤醒者

2

唯一对我有用的东西:

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

security.ignored=/**

可能是属性部分是多余的,或者可以用代码完成,但没有时间进行试验。无论如何是暂时的。


1

没有依赖项或代码更改的Spring Boot 2最简单的方法是:

spring:
  autoconfigure:
    exclude: org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration

2
这不适用于Spring Boot v2.2.2.RELEASE
Pra_A

0

将以下行添加到您的主应用程序。

如果您不使用activiti,请删除org.activiti.spring.boot.SecurityAutoConfiguration.class。

同样,如果您不使用spring-boot-actuator,请卸下一个用于执行器的装置。

@EnableAutoConfiguration(exclude = {
org.activiti.spring.boot.SecurityAutoConfiguration.class,
org.springframework.boot.actuate.autoconfigure.ManagementWebSecurityAutoConfiguration.class,
org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration.class })

0

如前所述,有多种解决方案可通过注释来禁用安全性

@EnableWebSecurity

批注和其他注释是通过application.properties或yml中的属性进行的。但是这些属性在最新的春季启动版本中显示为已弃用。

因此,我想分享另一种方法,在您的application-dev.propertiesapplication-dev.yml中配置默认的用户名和密码,并使用它们登录开发环境中的swagger等。

spring.security.user.name=admin
spring.security.user.password=admin

因此,该方法还将为您提供某种安全性,并且您可以与开发团队共享此信息。您也可以配置用户角色,但是在开发级别不需要。


-3

我在application.yml中添加了以下设置,并且运行良好。

security:
    route-patterns-to-be-skipped:
      - /**/*

可以将其转换security.route-paterns-to-be-skipped=/**/*为application.properties


1
此属性根本不存在。
德雷克斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.