89. Security
本部分解决有关使用 Spring Boot 时的安全性的问题,包括因将 Spring Security 与 Spring Boot 一起使用而引起的问题。
有关 Spring Security 的更多信息,请参见Spring Security 项目页面。
89.1 关闭 Spring Boot 安全性配置
如果您在应用程序中定义@Configuration
和WebSecurityConfigurerAdapter
,它将关闭 Spring Boot 中的默认 Webapp 安全设置。
89.2 更改 UserDetailsService 并添加用户帐户
如果提供类型AuthenticationManager
,AuthenticationProvider
或UserDetailsService
的@Bean
,则不会创建InMemoryUserDetailsManager
的默认@Bean
,因此您可以使用完整的 Spring Security 功能集(例如各种身份验证选项)。
添加用户帐户的最简单方法是提供自己的UserDetailsService
bean。
89.3 在代理服务器上运行时启用 HTTPS
确保所有主要端点仅可通过 HTTPS 进行访问对于任何应用程序来说都是一项重要的工作。如果您将 Tomcat 用作 servlet 容器,则 Spring Boot 如果检测到某些环境设置,则会自动添加 Tomcat 自己的RemoteIpValve
,并且您应该能够依靠HttpServletRequest
报告它是否安全(甚至在代理服务器的下游)。处理真实的 SSL 终止)。标准行为由是否存在某些请求 Headers(x-forwarded-for
和x-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();
}
}