|
此版本仍在开发中,尚未被视为稳定版本。如需最新稳定版本,请使用 Spring Boot 4.0.4! |
安全
本节探讨在使用 Spring Boot 时涉及的安全问题,包括将 Spring Security 与 Spring Boot 结合使用时所产生的相关问题。
有关 Spring Security 的更多信息,请参阅 Spring Security 项目页面。
关闭 Spring Boot 安全配置
如果你在应用程序中定义了一个包含 @Configuration 的 SecurityFilterChain bean,此操作将关闭 Spring Boot 中默认的 Web 应用安全设置。
更改 UserDetailsService 并添加用户账户
如果您提供类型为 @Bean、AuthenticationManager、AuthenticationProvider 或 UserDetailsService 的值,则不会创建 @Bean 的默认 InMemoryUserDetailsManager。
这意味着您可以使用 Spring Security 提供的全部功能(例如多种认证选项)。
添加用户账户的最简单方法是提供您自己的 UserDetailsService bean。
在代理服务器后运行时启用 HTTPS
确保所有主要端点仅通过 HTTPS 可用是任何应用程序的一项重要任务。
如果您使用 Tomcat 作为 Servlet 容器,那么 Spring Boot 会在检测到某些环境设置时自动添加 Tomcat 自身的 RemoteIpValve,使您可以依赖 HttpServletRequest 来报告其是否安全(即使在处理实际 SSL 终止的代理服务器下游)。
标准行为由某些请求头(x-forwarded-for 和 x-forwarded-proto)的存在与否决定,这些请求头的名称是约定俗成的,因此它应该适用于大多数前端代理。
您可以通过向 application.properties 添加一些条目来启用该阀门,如下例所示:
-
Properties
-
YAML
server.tomcat.remoteip.remote-ip-header=x-forwarded-for
server.tomcat.remoteip.protocol-header=x-forwarded-proto
server:
tomcat:
remoteip:
remote-ip-header: "x-forwarded-for"
protocol-header: "x-forwarded-proto"
(存在上述任一属性都会启用该阀门。
或者,您可以通过使用 WebServerFactoryCustomizer Bean 自定义 TomcatServletWebServerFactory 来添加 RemoteIpValve。)
要配置 Spring Security 以要求所有(或部分)请求使用安全通道,请考虑添加您自己的 SecurityFilterChain Bean,该 Bean 添加以下 HttpSecurity 配置:
-
Java
-
Kotlin
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.Customizer;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.web.SecurityFilterChain;
@Configuration
public class MySecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
// Customize the application security ...
http.redirectToHttps(Customizer.withDefaults());
return http.build();
}
}
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
import org.springframework.security.config.annotation.web.builders.HttpSecurity
import org.springframework.security.web.SecurityFilterChain
@Configuration
class MySecurityConfig {
@Bean
fun securityFilterChain(http: HttpSecurity): SecurityFilterChain {
// Customize the application security ...
http.redirectToHttps { }
return http.build()
}
}