복붙노트

[SPRING] Spring webflux : http를 https로 리디렉션합니다.

SPRING

Spring webflux : http를 https로 리디렉션합니다.

Spring webflux에서 http-> https redirect를 어떻게 구성 할 수 있습니까? 모든 HTTP 요청을 https로 리디렉션해야합니다 (http 요청에 http http-> https가 변경된 상태에서 301 http 상태 응답이 있어야 함을 이해함). 설명서에서이 설명서에 대한 정보를 찾지 못했습니다. 이 답변을 찾았지만 바람둥이와 관련이 있습니다. 나는 그물을 가지고있다.

해결법

  1. ==============================

    1.나는 길을 찾았고, 그것이 누군가를 돕기를 희망한다.

    나는 길을 찾았고, 그것이 누군가를 돕기를 희망한다.

    @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);
            }
        };
    }
    
  2. ==============================

    2.나는 그것을 다음과 같이 작동하도록 만들었다. 그러나 이것이 지원되는지 의심스럽고 앞으로 문제가 발생할 수 있습니다.

    나는 그것을 다음과 같이 작동하도록 만들었다. 그러나 이것이 지원되는지 의심스럽고 앞으로 문제가 발생할 수 있습니다.

    @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();
        }
    
    }
    
  3. from https://stackoverflow.com/questions/49045670/spring-webflux-redirect-http-to-https by cc-by-sa and MIT license