티스토리 뷰

반응형

 

* Spring Boot 에서 임베디드 톰켓 서버를 이용할 때 디폴트 서버로 HTTP 또는 HTTPS 를 선택해야 하는데, 이 때 HTTP 로 접속할 경우 HTTPS 로 redirect 시켜주는 방법

 

Spring Boot 2.0 버전부터 아래와 같이 config 파일을 작성하면
80 포트로 들어오는 요청을 433 포트로 전환 가능

package com.jane.backoffice.web.configs;

import org.apache.catalina.Context;
import org.apache.catalina.connector.Connector;
import org.apache.tomcat.util.descriptor.web.SecurityCollection;
import org.apache.tomcat.util.descriptor.web.SecurityConstraint;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.servlet.server.ServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class HttpRedirectConfig {
  @Bean
  public ServletWebServerFactory servletContainer() {
    TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {
      @Override
      protected void postProcessContext(Context context) {
        SecurityConstraint securityConstraint = new SecurityConstraint();
        securityConstraint.setUserConstraint("CONFIDENTIAL");
        SecurityCollection collection = new SecurityCollection();
        collection.addPattern("/*");
        securityConstraint.addCollection(collection);
        context.addConstraint(securityConstraint);
      }
    };

    tomcat.addAdditionalTomcatConnectors(createSslConnector());
    return tomcat;
  }

  private Connector createSslConnector() {
    Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
    connector.setPort(80);
    connector.setScheme("http");
    connector.setSecure(false);
    connector.setRedirectPort(443);
    return connector;
  }
}

 

 

 

이 때, ERR_TOO_MANY_REDIRECTS 오류가 발생할 수 있다.

이는 리디렉션이 서로 연결되어 있다는 사실에서 비롯되는데,
예를 들어 http://example.comhttps://example.com 로 리디렉션되고
https://example.com 은 다시 http://example.com 으로 리디렉션되어지는 것으로,
이 프로세스는 서버에 의해 설정된 리디렉션 횟수에 도달할 때까지 무한 반복 될 수 있으며,
초과되면 서버는 리디렉션 처리 시도를 중지되고
Apache 에서는 브라우저가 처리하는 비하인드 자동 리디렉션 대신 화면에서
"이 페이지를 찾을 수 있습니다" 메시지(실제 리디렉션 페이지)를 보고 이를 확인할 수 있다.

 

이 문제를 해결하기 위해서는 아래와 같이 HTTP 헤더에 더이상 위치 값이 보이지 않을 때까지
URL 을 계속 따르라는 명령을 주면 해결된다.

tomcat:
  protocol_header: x-forwarded-proto
  remote_ip_header: x-forwarded-for

(참고 : cnpnote.tistory.com/entry/SPRING-%EC%8A%A4%ED%94%84%EB%A7%81-%EB%B6%80%ED%8A%B8%EB%A1%9C-%EC%9E%90%EB%8F%99%EC%9C%BC%EB%A1%9C-https%EB%A1%9C-%EB%A6%AC%EB%94%94%EB%A0%89%EC%85%98%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95)

 

 

 

 

 

반응형

'Java' 카테고리의 다른 글

[Java] 정규표현식 Pattern, Matcher  (0) 2021.02.10
[Java] Object의 Field 값 얻는 방법  (0) 2021.02.10
[Java] URI 한글 인코딩 이슈  (0) 2021.02.10
[Java] Model 2 Web Architecture  (0) 2021.02.10
[Java] Java Web Programming 원리  (0) 2021.02.10
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함