HTTP

所有基於 HTTP 的通訊都應該透過使用 TLS 進行保護。

本節詳細介紹瞭如何使用 WebFlux 特有功能來輔助 HTTPS 使用。

重定向到 HTTPS

如果客戶端使用 HTTP 而非 HTTPS 傳送請求,您可以配置 Spring Security 重定向到 HTTPS。

以下 Java 配置將所有 HTTP 請求重定向到 HTTPS

重定向到 HTTPS
  • Java

  • Kotlin

@Bean
SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http) {
	http
		// ...
		.redirectToHttps(withDefaults());
	return http.build();
}
@Bean
fun springSecurityFilterChain(http: ServerHttpSecurity): SecurityWebFilterChain {
    return http {
        // ...
        redirectToHttps { }
    }
}

您可以將配置包裝在 if 語句中,以便僅在生產環境中啟用。或者,您可以透過查詢僅在生產環境中發生的請求屬性來啟用它。例如,如果生產環境添加了名為 X-Forwarded-Proto 的頭,您應該使用以下 Java 配置

當存在 X-Forwarded 頭時重定向到 HTTPS
  • Java

  • Kotlin

@Bean
SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http) {
	http
		// ...
		.redirectToHttps(redirect -> redirect
			.httpsRedirectWhen(e -> e.getRequest().getHeaders().containsKey("X-Forwarded-Proto"))
		);
	return http.build();
}
@Bean
fun springSecurityFilterChain(http: ServerHttpSecurity): SecurityWebFilterChain {
    return http {
        // ...
        redirectToHttps {
            httpsRedirectWhen {
                it.request.headers.containsKey("X-Forwarded-Proto")
            }
        }
    }
}

Strict Transport Security

Spring Security 支援 Strict Transport Security 並預設啟用它。

代理伺服器配置

Spring Security 與代理伺服器整合