Spring boot Security Disable security

当我使用 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: {}

为了修复这个异常,我必须添加属性 -启用 = 错误。我的理解是,当执行器在类路径中时,应该同时设置 启用 = 错误启用 = 错误来禁用安全性。

如果我理解错了,谁能告诉我吗?

277945 次浏览

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

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

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

@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 应用程序,则不需要登录。

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

@EnableWebSecurity

For example:

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

将下面几行添加到您的主应用程序中。

如果不使用 activiti,请删除 org.activti.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

Step 2: Add this to your 应用性能 file.

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

For more details look here: http://codelocation.com/how-to-turn-on-and-off-spring-security-in-spring-boot-application/

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

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

对于春季启动2用户,它必须是

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

我只是简单地在 application.properties中添加了 security.ignored=/**,这样就很有魅力了。

您需要将此条目添加到 应用性能以绕过 Springboot 默认安全性

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

那就没有认证箱了。 其他人,凭证是:- user99b962fa-1848-4201-ae67-580bdeae87e9 < em > (随机生成密码)

Note: my springBootVersion = '1.5.14.RELEASE'

你可以通过以下两个步骤在你的项目中使用 配置为切换弹簧安全性:

第一步: Add a @ConditionalOnProperty annotation on top of your SecurityConfig class. Refer below:

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

第二步: 将以下配置添加到 application.propertiesapplication.yml文件中。

应用性能

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

或者

应用

security:
ignored: /**


myproject:
security:
enabled: false

我在 application.yml 中添加了以下设置,工作得很好。

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

这可以转换为 application.properties 的 security.route-paterns-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();
}


}

还有 application.properties add 的 insie

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

正如前面提到的多个解决方案通过注释

@ EnableWebSecurity

标注和其他是通过 application.properties 或 yml 中的属性实现的。但是这些属性在最新的春季启动版本中显示为已经过时了。

因此,我想分享另一种方法来配置默认的用户名和密码在您的 Application-dev. propertiesApplication-dev. yml,并使用它们登录到虚张声势等开发环境。

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

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

对于 弹簧靴2,在 应用配置中不推荐使用以下属性

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

To disable security for Sprint Boot 2基本 + 执行器安全 following properties can be used in 应用 file instead of annotation based exclusion (@EnableAutoConfiguration (排除 = { 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

对于 应用性能语法如下

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

还有

security.ignored=/**

可能是属性部分是多余的或者可以在代码中完成,但是没有时间进行实验。反正是暂时的。

对于 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)

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

你可以在现有的类或新的类中这样做。

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

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

使用 Gradle 和 Spring 启动 v2.4.4,可以通过在 build.gradle中添加这个配置来完全排除 Spring 安全性

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

从 SpringBoot2.7.3开始,使用 @EnableAutoConfiguration(exclude = {})生成了一个错误,建议在 @SpringBootApplication注释中使用 exclude属性。

下面是完全禁用 Spring 安全性时对我有效的方法。

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


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


}

我试图只排除 SecurityAutoConfiguration.class,但是我得到了一个错误,因为没有为 ManagementWebSecurityAutoConfiguration.class定义 HttpSecurity bean。

在 Spring2.6.0中,这对我很有帮助:

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

另外,我还必须删除 pom.xml 中的依赖项:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>

在 Spring Security 5.7.0-M2中,WebSecurityConfigurerAdapter是不被推荐的。 Spring Security 团队鼓励用户转向基于组件的安全配置。

package com.may.security;


import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.web.SecurityFilterChain;


@Configuration
@EnableWebSecurity
public class SecurityConfig {


@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http.authorizeRequests().antMatchers("/**").permitAll(); // config to permit all requests
return http.build();
}


@Bean
public AuthenticationManager authenticationManager() { // to delete default username and password that is printed in the log every time, you can provide here any auth manager (InMemoryAuthenticationManager, etc) as you need
return authentication -> {
throw new UnsupportedOperationException();
};
}
}

这里有更多的例子:

Https://spring.io/blog/2022/02/21/spring-security-without-the-websecurityconfigureradapter