跳到主要内容
版本:3.5.10

Security

QWen Max 中英对照 Security

本节解答了在使用 Spring Boot 时有关安全性的常见问题,包括在 Spring Boot 中使用 Spring Security 所引发的问题。

有关 Spring Security 的更多信息,请参见 Spring Security 项目页面

关闭 Spring Boot 安全配置

如果你在应用中定义了一个带有 SecurityFilterChain bean 的 @Configuration,此操作将关闭 Spring Boot 中的默认 Web 应用安全设置。

更改 UserDetailsService 并添加用户账户

如果你提供了类型为 AuthenticationManagerAuthenticationProviderUserDetailsService@Bean,则不会自动创建默认的 InMemoryUserDetailsManager @Bean。这意味着你可以使用 Spring Security 提供的全部功能(例如 各种身份验证选项)。

添加用户账户最简单的方法是提供你自己的 UserDetailsService bean。

在代理服务器后运行时启用 HTTPS

确保所有主要端点仅通过 HTTPS 提供,是任何应用程序的一项重要任务。如果你使用 Tomcat 作为 servlet 容器,那么当 Spring Boot 检测到某些环境设置时,会自动添加 Tomcat 自带的 RemoteIpValve,从而允许你依赖 HttpServletRequest 来判断当前请求是否安全(即使该请求位于处理真实 SSL 终止的代理服务器之后)。标准行为由某些请求头(x-forwarded-forx-forwarded-proto)的存在与否决定,这些头的名称是约定俗成的,因此应适用于大多数前端代理。你可以通过在 application.properties 中添加一些配置项来启用该 Valve,如下例所示:

server.tomcat.remoteip.remote-ip-header=x-forwarded-for
server.tomcat.remoteip.protocol-header=x-forwarded-proto

(只要存在上述任一属性,就会启用该 Valve。或者,你也可以通过使用 WebServerFactoryCustomizer Bean 自定义 TomcatServletWebServerFactory,来添加 RemoteIpValve。)

要配置 Spring Security 以要求所有(或部分)请求使用安全通道,可以考虑添加你自己的 SecurityFilterChain Bean,并在其中加入以下 HttpSecurity 配置:

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

}