当我使用 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 = false 和 management.security.enabled = false 都应设置为禁用安全性。
如果我的理解错了,有人可以告诉我吗?
答案 0 :(得分:69)
似乎工作得很好的是创建一个包含以下内容的文件application-dev.properties
:
security.basic.enabled=false
management.security.enabled=false
如果您随后使用dev
个人资料启动Spring Boot应用,则无需登录。
答案 1 :(得分:54)
如果包装中有弹簧启动器,则应添加以下内容
@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}
)
答案 2 :(得分:35)
如果您需要安全性作为依赖项但不希望Spring Boot为您配置它,则可以使用此排除项:
@EnableAutoConfiguration(exclude = {
org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration.class
})
答案 3 :(得分:14)
对于春季启动2用户,必须
@EnableAutoConfiguration(exclude = {
org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class
})
答案 4 :(得分:10)
步骤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/
答案 5 :(得分:6)
如果您在测试课程中使用@WebMvcTest
注释
@EnableAutoConfiguration(exclude = { SecurityAutoConfiguration.class, ManagementWebSecurityAutoConfiguration.class })
@TestPropertySource(properties = {"spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration"})
没有帮助。
您可以在此处禁用安全性
@WebMvcTest(secure = false)
答案 6 :(得分:4)
请允许如下所示在WebSecurityConfigurerAdapter中允许所有请求。
您可以在现有班级或新班级中这样做。
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().anyRequest().permitAll();
}
请注意:如果该类是现有的GlobalMethodSecurityConfiguration类,则必须将其禁用。
答案 7 :(得分:4)
对于 Spring Boot 2 , application.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
答案 8 :(得分:3)
为了避免安全性,您可以使用注释。 在configure类之上使用此批注:
@EnableWebSecurity
例如:
@EnableWebSecurity
@Configuration
public class AuthFilter{
// configured method
}
答案 9 :(得分:3)
允许使用antMatchers(“/”)
访问所有内容 protected void configure(HttpSecurity http) throws Exception {
System.out.println("configure");
http.csrf().disable();
http.authorizeRequests().antMatchers("/").permitAll();
}
答案 10 :(得分:3)
我只是在security.ignored=/**
中添加了application.properties
,这就是魅力所在。
答案 11 :(得分:0)
使用 Gradle 和 Spring boot v2.4.4,您可以通过在您的 build.gradle
中添加此配置来完全排除 Spring 安全性
configurations.all {
exclude group:"org.springframework.boot", module: "spring-boot-starter-security"
}
答案 12 :(得分:0)
Spring Boot 2中没有依赖项或代码更改的最简单方法是:
spring:
autoconfigure:
exclude: org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration
答案 13 :(得分:0)
唯一对我有用的东西
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable().authorizeRequests().anyRequest().permitAll();
}
和
security.ignored=/**
可能是属性部分是多余的,或者可以用代码完成,但没有时间进行试验。无论如何都是暂时的。
答案 14 :(得分:0)
如前所述,有多种解决方案通过注释
来禁用安全性。@EnableWebSecurity
注释和其他注释是通过application.properties或yml中的属性进行的。但是这些属性在最新的春季启动版本中显示为已弃用。
因此,我想分享另一种在您的 application-dev.properties 或 application-dev.yml 中配置默认用户名和密码的方法,并使用它们登录在开发环境中陷入困境等。
spring.security.user.name=admin
spring.security.user.password=admin
因此,此方法还将为您提供某种安全性,并且您可以与开发团队共享此信息。您也可以配置用户角色,但是在开发级别不需要。
答案 15 :(得分:0)
将以下课程添加到您的代码中
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中添加
security.ignored=/**
security.basic.enabled=false
management.security.enabled=false
答案 16 :(得分:0)
我在application.yml中添加了以下设置,并且工作正常。
security:
route-patterns-to-be-skipped:
- /**/*
对于application.properties,可以将其转换为security.route-paterns-to-be-skipped=/**/*
答案 17 :(得分:0)
您可以按照以下2个步骤配置为在项目中切换弹簧安全性:
步骤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
}
步骤2:
将以下配置添加到您的application.properties
或application.yml
文件中。
application.properties
security.ignored=/**
myproject.security.enabled=false
OR
application.yml
security:
ignored: /**
myproject:
security:
enabled: false
答案 18 :(得分:0)
您需要将此条目添加到 application.properties 中,以绕过 Springboot默认安全性
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration
然后将没有任何身份验证框。
otrws,凭据为:-
user
和99b962fa-1848-4201-ae67-580bdeae87e9
(随机生成的密码)
Note: my springBootVersion = '1.5.14.RELEASE'
答案 19 :(得分:0)
将以下行添加到您的主应用中。
如果你没有使用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 })