安全

本节解决使用 Spring Boot 时有关安全性的问题,包括将 Spring Security 与 Spring Boot 一起使用时出现的问题。spring-doc.cadn.net.cn

有关 Spring Security 的更多信息,请参阅 Spring Security 项目页面spring-doc.cadn.net.cn

关闭 Spring Boot 安全配置

如果定义@Configuration使用SecurityFilterChainbean 时,此作会关闭 Spring Boot 中的默认 webapp 安全设置。spring-doc.cadn.net.cn

更改 UserDetailsService 并添加用户帐户

如果您提供@Bean类型AuthenticationManager,AuthenticationProviderUserDetailsService,默认值@BeanInMemoryUserDetailsManager未创建。 这意味着您拥有可用的 Spring Security 的完整功能集(例如各种身份验证选项)。spring-doc.cadn.net.cn

添加用户帐户的最简单方法是提供您自己的帐户UserDetailsService豆。spring-doc.cadn.net.cn

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

确保所有主要端点只能通过 HTTPS 使用对于任何应用程序来说都是一项重要的工作。 如果使用 Tomcat 作为 servlet 容器,则 Spring Boot 会添加 Tomcat 自己的RemoteIpValve如果它检测到某些环境设置,则会自动,允许您依赖HttpServletRequest报告它是否安全(甚至是处理实际 SSL 终止的代理服务器的下游)。 标准行为由某些请求标头(x-forwarded-forx-forwarded-proto),其名称是常规的,因此它应该适用于大多数前端代理。 您可以通过添加一些条目来打开阀门application.properties,如以下示例所示:spring-doc.cadn.net.cn

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"

(这些属性中的任何一个的存在都会在阀门上切换。 或者,您可以添加RemoteIpValve通过自定义TomcatServletWebServerFactory使用WebServerFactoryCustomizer豆子。spring-doc.cadn.net.cn

要将 Spring Security 配置为要求所有(或部分)请求的安全通道,请考虑添加您自己的SecurityFilterChain添加以下内容的 beanHttpSecurity配置:spring-doc.cadn.net.cn

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

}