89. Security

本部分解决有关使用 Spring Boot 时的安全性的问题,包括因将 Spring Security 与 Spring Boot 一起使用而引起的问题。

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

89.1 关闭 Spring Boot 安全性配置

如果您在应用程序中定义@ConfigurationWebSecurityConfigurerAdapter,它将关闭 Spring Boot 中的默认 Webapp 安全设置。

89.2 更改 UserDetailsService 并添加用户帐户

如果提供类型AuthenticationManagerAuthenticationProviderUserDetailsService@Bean,则不会创建InMemoryUserDetailsManager的默认@Bean,因此您可以使用完整的 Spring Security 功能集(例如各种身份验证选项)。

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

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

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

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

(这些属性中的任何一个都会在阀上切换.或者,您可以通过添加TomcatServletWebServerFactory bean 来添加RemoteIpValve.)

要将 Spring Security 配置为要求所有(或某些)请求使用安全通道,请考虑添加自己的WebSecurityConfigurerAdapter,该WebSecurityConfigurerAdapter将添加以下HttpSecurity配置:

@Configuration
public class SslWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter {

	@Override
	protected void configure(HttpSecurity http) throws Exception {
		// Customize the application security
		http.requiresChannel().anyRequest().requiresSecure();
	}

}