HTTP

所有基于 HTTP 的通信,包括静态资源,都应使用 TLS 进行保护。

作为一个框架,Spring Security 不处理 HTTP 连接,因此不直接提供对 HTTPS 的支持。然而,它确实提供了一些有助于使用 HTTPS 的功能。

重定向到 HTTPS

当客户端使用 HTTP 时,您可以在 ServletWebFlux 环境中配置 Spring Security 以重定向到 HTTPS。

Strict Transport Security

Spring Security 支持 Strict Transport Security 并默认启用它。

代理服务器配置

使用代理服务器时,务必确保应用程序配置正确。例如,许多应用程序都有一个负载均衡器,它响应 https://example.com/ 的请求,并将请求转发到位于 https://192.168.0.107 的应用服务器。如果没有正确配置,应用服务器将不知道负载均衡器的存在,并会将请求视为客户端请求了 https://192.168.0.107:8080。

要解决此问题,您可以使用 RFC 7239 指定正在使用负载均衡器。为了让应用程序感知到这一点,您需要配置应用服务器以识别 X-Forwarded 头。例如,Tomcat 使用 RemoteIpValve,而 Jetty 使用 ForwardedRequestCustomizer。此外,Spring 用户可以在 Servlet 栈中使用 ForwardedHeaderFilter,或在 Reactive 栈中使用 ForwardedHeaderTransformer

Spring Boot 用户可以使用 server.forward-headers-strategy 属性来配置应用程序。有关更多详细信息,请参阅 Spring Boot 文档