Spring Boot의 내장 WAS이면서 핫(?)한 Undertow로 개인프로젝트를 진행하고 있는데 Tomcat과는 다르게 멀티포트 및 SSL 리다이렉트 예제가 그리 많지 않은것 같다. 포트번호는 환경설정 파일에서 설정하고 @Configuration 어노테이션으로 Undertow에 80포트 추가와 리다이렉트를 설정한다.

application.yml

기본포트를 443으로 설정하고 HTTP/2도 사용할 수 있도록 설정한다. 물론 SSL 인증서를 설정해야 가능한데 Certbot에서 무료 인증서를 쉽게 발급 받을 수 있다.

http:
  port: 80
server:
  port: 443
  http2:
    enabled: true
  ssl:
    ...

ServletConfig.java

@Configuration 어노테이션으로 환경구성을 할 수 있게 하고 application.yml에서 설정한 포트번호 추가 및 리다이렉트 하도록 설정한다.

@Configuration
public class ServletConfig {

	@Value("${http.port:0}")
	private int httpPort;

	@Value("${server.port:0}")
	private int sslPort;

	@Bean
    public ServletWebServerFactory serverFactory() {
        UndertowServletWebServerFactory factory = new UndertowServletWebServerFactory();

        factory.addBuilderCustomizers((UndertowBuilderCustomizer) builder -> {
            builder.addHttpListener(httpPort, "0.0.0.0");
        });

        factory.addDeploymentInfoCustomizers(deploymentInfo -> {
            deploymentInfo.addSecurityConstraint(
                new SecurityConstraint()
                	.addWebResourceCollection(new WebResourceCollection().addUrlPattern("/*"))
                    .setTransportGuaranteeType(TransportGuaranteeType.CONFIDENTIAL)
                    .setEmptyRoleSemantic(SecurityInfo.EmptyRoleSemantic.PERMIT))
                	.setConfidentialPortManager(exchange -> sslPort);
        });

        return factory;
	}
}

기한제한 없이 가상서버호스팅을 무료로 제공하는 Oracle Cloud Free Tier로 간단히 테스트 해볼 수 있다.
메인페이지: http://oci.baenam.com
DB접속페이지: http://oci.baenam.com/testdb