Spring security Spring引导安全性禁用安全性

Spring security Spring引导安全性禁用安全性,spring-security,spring-boot,Spring Security,Spring Boot,当我使用security.basic.enabled=false来禁用具有以下依赖项的Spring启动项目的安全性时: org.springframework.boot SpringBootStarterWeb org.springframework.boot 弹簧启动安全 org.springframework.boot 弹簧靴起动器执行器 com.oracle ojdbc6 org.springframework.boot 弹簧启动机tomcat 假如 org.springframewor

当我使用security.basic.enabled=false来禁用具有以下依赖项的Spring启动项目的安全性时:


org.springframework.boot
SpringBootStarterWeb
org.springframework.boot
弹簧启动安全
org.springframework.boot
弹簧靴起动器执行器
com.oracle
ojdbc6
org.springframework.boot
弹簧启动机tomcat
假如
org.springframework.boot
弹簧起动试验
测试
我看到以下异常:

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,以禁用安全性


如果我的理解有误,有人能告诉我吗

如果您需要安全性作为依赖项,但不希望Spring Boot为您配置它,您可以使用此排除:

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

如果您的软件包中有弹簧启动执行器,您应该添加以下内容

@EnableAutoConfiguration(exclude = {
        org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration.class,
        org.springframework.boot.actuate.autoconfigure.ManagementWebSecurityAutoConfiguration.class})
对于较旧的Spring引导,该类被称为
ManagementSecurityAutoConfiguration

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

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

如果对于反应式应用程序,您遇到了相同的问题,则可以排除以下类

@SpringBootApplication(exclude = {ReactiveSecurityAutoConfiguration.class, ReactiveManagementWebSecurityAutoConfiguration.class })

创建一个文件
application-dev.properties
,该文件包含:

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

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

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

@EnableWebSecurity
例如:

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

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

如果未使用activiti,请删除org.activiti.spring.boot.SecurityAutoConfiguration.class

同样,如果您不使用弹簧启动执行器,请拆下执行器的一个

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

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

//@EnableWebSecurity
步骤2:将其添加到应用程序.properties文件中

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

有关更多详细信息,请参见此处:

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


对于spring boot 2用户,它必须

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

我只是在
application.properties
中添加了
security.ignored=/**
,这就成功了。

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

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

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


注意:my springBootVersion='1.5.14.RELEASE'

您可以通过以下两个步骤配置以在项目中切换spring安全性:

第1步: 在SecurityConfig类的顶部添加一个
@ConditionalOnProperty
注释。请参阅下文:

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity (prePostEnabled = true)
@ConditionalOnProperty (name = "myproject.security.enabled", havingValue = "true", matchIfMissing = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
   // your security config
}
第二步: 将以下配置添加到
应用程序.properties
应用程序.yml
文件中

应用程序属性

application.yml


我在application.yml中添加了以下设置,效果很好

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

这可以转换为
安全性。对于应用程序,要跳过的路由模式=/***
。属性将以下类添加到代码中

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.properties添加

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

如前所述,多个解决方案通过对

@启用Web安全性

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

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

spring.security.user.name=admin
spring.security.user.password=admin
因此,这种方法也将为您提供某种安全性,您可以与您的开发团队共享这些信息。您还可以配置用户角色,但这在开发级别不是必需的。

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

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

对于application.properties,语法如下

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

唯一对我有用的是:

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


可能是属性部分是冗余的,或者可以在代码中完成,但没有时间进行实验。无论如何都是暂时的。

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

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

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

@EnableAutoConfiguration(exclude = { SecurityAutoConfiguration.class, ManagementWebSecurityAutoConfiguration.class })
@TestPropertySource(properties = {"spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration"})
这对你没有帮助

你可以在这里禁用安全性

@WebMvcTest(secure = false)

答案是允许WebSecurity配置适配器中的所有请求,如下所示

您可以在现有类或新类中执行此操作

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

请注意:如果存在GlobalMethodSecurity配置类,则必须禁用它。

对于Gradle和Spring boot v2.4.4,您可以通过在
build.Gradle中添加此配置来完全排除Spring安全性

configurations.all {
    exclude group:"org.springframework.boot", module: "spring-boot-starter-security"
}

如果你只是想禁用所有东西,为什么你的类路径需要安全性?无论如何,堆栈跟踪是不完整的,因此无法知道是什么
spring:
  autoconfigure:
    exclude: org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration
@EnableAutoConfiguration(exclude = { SecurityAutoConfiguration.class, ManagementWebSecurityAutoConfiguration.class })
@TestPropertySource(properties = {"spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration"})
@WebMvcTest(secure = false)
@Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests().anyRequest().permitAll();
    }
configurations.all {
    exclude group:"org.springframework.boot", module: "spring-boot-starter-security"
}