此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Boot 3.3.4! |
此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Boot 3.3.4! |
本节解决使用 Spring Boot 时的安全性问题,包括将 Spring Security 与 Spring Boot 一起使用时出现的问题。
有关 Spring Security 的更多信息,请参阅 Spring Security 项目页面。
关闭 Spring Boot 安全配置
如果在应用程序中定义 with a bean,此操作将关闭 Spring Boot 中的默认 webapp 安全设置。@Configuration
SecurityFilterChain
更改 UserDetailsService 并添加用户帐户
如果您提供 类型 、 、 或 ,则默认值为 not created。
这意味着您拥有可用的 Spring Security 的完整功能集(例如各种身份验证选项)。@Bean
AuthenticationManager
AuthenticationProvider
UserDetailsService
@Bean
InMemoryUserDetailsManager
添加用户帐户的最简单方法是提供您自己的 bean。UserDetailsService
在代理服务器后运行时启用 HTTPS
确保所有主要终端节点仅通过 HTTPS 可用,对于任何应用程序来说都是一项重要的苦差事。
如果你使用 Tomcat 作为 servlet 容器,那么 Spring Boot 会在检测到某些环境设置时自动添加 Tomcat 自己的容器,从而允许你依靠 来报告它是否安全(甚至在处理实际 SSL 终止的代理服务器的下游)。
标准行为由某些请求标头 ( 和 )的存在与否决定,这些请求标头的名称是约定俗成的,因此它应该适用于大多数前端代理。
您可以通过向 中添加一些条目来打开阀门,如以下示例所示:RemoteIpValve
HttpServletRequest
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"
(这些属性中的任何一个的存在都会打开阀门。
或者,您可以通过自定义 using a bean.)RemoteIpValve
TomcatServletWebServerFactory
WebServerFactoryCustomizer
要将 Spring Security 配置为要求所有(或部分)请求都使用安全通道,请考虑添加您自己的 Bean,该 bean 添加以下配置:SecurityFilterChain
HttpSecurity
-
Java
-
Kotlin
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
public class MySecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
// Customize the application security ...
http.requiresChannel((channel) -> channel.anyRequest().requiresSecure());
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.requiresChannel { requests -> requests.anyRequest().requiresSecure() }
return http.build()
}
}