HTTP

本站(springdoc.cn)中的内容来源于 spring.io ,原始版权归属于 spring.io。由 springdoc.cn 进行翻译,整理。可供个人学习、研究,未经许可,不得进行任何转载、商用或与之相关的行为。 商标声明:Spring 是 Pivotal Software, Inc. 在美国以及其他国家的商标。

所有基于HTTP的通信都应该 使用TLS 进行保护。

本节涵盖了关于使用WebFlux特定功能协助HTTPS使用的细节。

重定向到HTTPS

如果客户端使用HTTP而不是HTTPS发出请求,你可以配置Spring Security重定向到HTTPS。

下面的Java配置将任何HTTP请求重定向到HTTPS。

Redirect to 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配置。

Redirect to HTTPS when X-Forwarded
  • 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")
            }
        }
    }
}

严格的传输安全

Spring Security提供了对 严格传输安全 的支持,并默认启用了它。

代理服务器配置

Spring Security 整合代理服务器