[英]Spring webflux: redirect http to https
如何在 spring webflux 中配置 http-> https 重定向? 我需要将所有http
请求重定向到https
(据我所知,任何http
请求都应该具有301
http 状态响应并更改 http-> https)。 在文档中没有找到任何关于它的信息。 我找到了这个答案,但它与tomcat有关。 我有网。
我找到了方法,希望它可以帮助某人:
@Bean
public WebFilter httpsRedirectFilter() {
return new WebFilter() {
@Override
public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
URI originalUri = exchange.getRequest().getURI();
//here set your condition to http->https redirect
List<String> forwardedValues = exchange.getRequest().getHeaders().get("x-forwarded-proto");
if (forwardedValues != null && forwardedValues.contains("http")) {
try {
URI mutatedUri = new URI("https",
originalUri.getUserInfo(),
originalUri.getHost(),
originalUri.getPort(),
originalUri.getPath(),
originalUri.getQuery(),
originalUri.getFragment());
ServerHttpResponse response = exchange.getResponse();
response.setStatusCode(HttpStatus.MOVED_PERMANENTLY);
response.getHeaders().setLocation(mutatedUri);
return Mono.empty();
} catch (URISyntaxException e) {
throw new IllegalStateException(e.getMessage(), e);
}
}
return chain.filter(exchange);
}
};
}
我设法使它与以下工作。 但是,我怀疑这是否受支持,并且将来可能会导致问题。
@Configuration
public class HttpToHttpsRedirectConfig {
@PostConstruct
public void startRedirectServer() {
NettyReactiveWebServerFactory httpNettyReactiveWebServerFactory = new NettyReactiveWebServerFactory(8080);
httpNettyReactiveWebServerFactory.getWebServer((request, response) -> {
URI uri = request.getURI();
URI httpsUri;
try {
httpsUri = new URI("https", uri.getUserInfo(), uri.getHost(), 8443, uri.getPath(), uri.getQuery(), uri.getFragment());
} catch (URISyntaxException e) {
return Mono.error(e);
}
response.setStatusCode(HttpStatus.MOVED_PERMANENTLY);
response.getHeaders().setLocation(httpsUri);
return response.setComplete();
}).start();
}
}
有一个内置的redirectToHttps
过滤器对我有用。 它可以按如下方式使用:
@Bean
public SecurityWebFilterChain securityWebFilterChain(final ServerHttpSecurity http) {
http
.authorizeExchange()
.anyExchange()
.authenticated()
.and().oauth2Login()
.redirectToHttps();
return http.build();
}
文档可以在这里找到
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.