[SPRING] 스프링 부트로 자동으로 https로 리디렉션하는 방법
SPRING스프링 부트로 자동으로 https로 리디렉션하는 방법
http 트래픽을 모두 https로 리디렉션하도록 임베디드 tomcat 서버를 쉽게 구성 할 수 있습니까? 탄성 부트 밸런서 뒤에있는 ec2 인스턴스에서 실행되는 스프링 부트를 가지고 있습니다. 나에게 ssl을 처리하도록 ELB를 구성했다. (멋진데) X-FORWARDED-PROTO 헤더를 "https"로 설정한다. 나는 그것이 설정되지 않았을 때를 감지하고 사용자가 아직 https를 사용하지 않도록 강제로 리디렉션합니다.
지금까지, 나는 행운과 함께 내 application.properties 파일에 다음을 추가하려고 시도했다.
server.tomcat.protocol-header=x-forwarded-proto
security.require-ssl=true
해결법
-
==============================
1.내 답변은 조금 늦었지만 최근에는이 문제가있어서 나를 위해 일한 솔루션을 게시하고 싶습니다.
내 답변은 조금 늦었지만 최근에는이 문제가있어서 나를 위해 일한 솔루션을 게시하고 싶습니다.
원래 Tomcat을 X-Forwarded 헤더를 사용하도록 설정하는 것으로 충분할 것이라고 생각했지만 Tomcat의 RemoteIPValue는 정상적으로이 케이스를 처리해야합니다.
내 솔루션은 EmbeddedServletContainerCustomizer를 추가하고 ConnectorCustomizer를 추가하는 것이 었습니다. (여기서 나는 Tomcat 8을 사용하고있다)
@Component public class TomcatContainerCustomizer implements EmbeddedServletContainerCustomizer { private static final Logger LOGGER = LoggerFactory.getLogger(TomcatContainerCustomizer.class); @Override public void customize(final ConfigurableEmbeddedServletContainer container) { if (container instanceof TomcatEmbeddedServletContainerFactory) { final TomcatEmbeddedServletContainerFactory tomcat = (TomcatEmbeddedServletContainerFactory) container; tomcat.addConnectorCustomizers(connector -> { connector.setScheme("https"); connector.setProxyPort(443); }); LOGGER.info("Enabled secure scheme (https)."); } else { LOGGER.warn("Could not change protocol scheme because Tomcat is not used as servlet container."); } } }
중요한 점은 Scheme을 https로 설정할뿐만 아니라 Spring Boot의 모든 내부 리다이렉션을 포트 80으로 라우팅하지 않은 ProxyPort를 설정한다는 것입니다.
희망은 도움이 :-)
-
==============================
2.기본 인증을 사용하지 않으면 (최소한 Spring Boot의 이전 버전에서는) 구성 등록 정보 security.require-ssl이 작동하지 않습니다. 따라서 다음과 비슷한 코드를 사용하여 수동으로 모든 요청을 보호해야합니다.
기본 인증을 사용하지 않으면 (최소한 Spring Boot의 이전 버전에서는) 구성 등록 정보 security.require-ssl이 작동하지 않습니다. 따라서 다음과 비슷한 코드를 사용하여 수동으로 모든 요청을 보호해야합니다.
@Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter { @Inject private SecurityProperties securityProperties; @Override protected void configure(HttpSecurity http) throws Exception { if (securityProperties.isRequireSsl()) http.requiresChannel().anyRequest().requiresSecure(); } }
내 대답은 여기에서 확인할 수 있습니다 : Spring Boot from HTTP to HTTPS
-
==============================
3.키 저장소 파일과 몇 개의 구성 클래스가 필요합니다.
키 저장소 파일과 몇 개의 구성 클래스가 필요합니다.
아래 링크에서 자세히 설명합니다.
임베디드 바람둥이에 대한 Https
-
==============================
4.HTTP의 https에 대한 Spring Boot 2.0 리디렉션 :
HTTP의 https에 대한 Spring Boot 2.0 리디렉션 :
@Configuration에 다음을 추가하십시오.
@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(redirectConnector()); return tomcat; } private Connector redirectConnector() { Connector connector = new Connector( TomcatServletWebServerFactory.DEFAULT_PROTOCOL); connector.setScheme("http"); connector.setPort(8080); connector.setSecure(false); connector.setRedirectPort(8443); return connector; }
from https://stackoverflow.com/questions/22625699/how-to-redirect-automatically-to-https-with-spring-boot by cc-by-sa and MIT license