在新的 Spring Boot 项目中,引入 spring-boot-starter-security 依赖后,Spring Security 会自动启用,为应用增加默认的安全防护。这虽然方便,但在某些无需安全认证的场景下(例如内部工具、API 测试环境),反而成为负担,增加了开发和部署的复杂度。我们需要一种方法来关闭 Spring Security,以便简化项目结构和流程。
关闭 Spring Security 的几种方案
关闭 Spring Security 的方法有很多种,根据不同的需求可以选择不同的方案。这里介绍几种常见的,并分析其优缺点。
方案一:排除 Security 依赖
最直接的方法是在 pom.xml 文件中排除 spring-boot-starter-security 依赖。这从根本上移除了 Spring Security 的支持。
<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>
<optional>true</optional>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</exclusion>
</exclusions>
</dependency>
优点:完全移除 Security,应用启动更快,资源占用更少。
缺点:如果后续需要重新启用 Security,需要重新添加依赖,可能需要修改大量代码。
方案二:使用 @ConditionalOnProperty 注解
通过 @ConditionalOnProperty 注解,可以根据配置文件的属性值来决定是否启用 Security 配置。这是一种更加灵活的方式。
首先,创建一个 Security 配置类:
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
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;
@Configuration
@EnableWebSecurity
@ConditionalOnProperty(name = "security.enabled", havingValue = "true", matchIfMissing = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().anyRequest().permitAll().and().csrf().disable(); // 允许所有请求,禁用 CSRF
}
}
然后在 application.properties 或 application.yml 文件中配置 security.enabled 属性:
# 启用 Security (默认)
security.enabled=true
# 禁用 Security
#security.enabled=false
优点:可以通过配置灵活控制 Security 的启用和禁用,无需修改代码。
缺点:需要编写额外的配置类。
方案三:使用 management.security.enabled=false (针对 Actuator)
如果你只是想禁用 Spring Boot Actuator 的安全保护,可以使用 management.security.enabled=false 配置。这不会影响整个应用的 Security 设置,只针对 Actuator 端点。
management.security.enabled=false
优点:只禁用 Actuator 的安全保护,不影响其他功能。
缺点:只适用于 Actuator,不适用于禁用整个应用的 Security。
实战避坑经验总结
明确需求:在决定关闭 Spring Security 之前,务必明确项目是否真的不需要安全认证。如果只是临时测试,可以考虑使用
@Profile注解,为不同的环境配置不同的 Security 设置。谨慎排除依赖:如果排除了
spring-boot-starter-security依赖,后续需要重新启用时,可能会遇到版本冲突等问题。建议使用@ConditionalOnProperty注解,更加灵活。注意 Actuator 安全:如果使用了 Spring Boot Actuator,即使禁用了整个应用的 Security,也应该注意 Actuator 端点的安全。可以使用
management.security.enabled=false或自定义 Actuator 安全配置。考虑使用 Nginx 等反向代理服务器:如果应用部署在公网环境,即使禁用了 Spring Security,也应该考虑使用 Nginx 等反向代理服务器,配置防火墙、负载均衡等安全措施,防止恶意攻击。Nginx 可以配置合理的并发连接数,并利用宝塔面板等工具进行管理和监控。

日志审计:虽然关闭了 Spring Security,但仍然要保证应用有完善的日志审计机制,记录用户的操作行为,方便排查问题。
结论
关闭 Spring Security 的方法有很多种,选择哪种方案取决于具体的应用场景和需求。在实际项目中,应该权衡各种方案的优缺点,选择最适合自己的方案。希望本文能帮助你更好地理解如何在新的 Spring Boot 项目中关闭 Spring Security。
如何关闭 Spring Security 小结
总的来说,在 Spring Boot 项目中关闭 Spring Security 主要有排除依赖、条件注解、针对 Actuator 关闭三种方案。需要根据项目具体情况选择合适的方案。同时需要注意即使关闭了 Spring Security,仍然要保证应用的安全,例如使用 Nginx 反向代理等。
冠军资讯
键盘上的咸鱼