我的回答是有點晚了,但我剛剛有這個問題,要張貼這爲我工作的解決方案。
最初,我認爲將tomcat設置爲使用X-Forwarded標頭就足夠了,但Tomcat的RemoteIPValve(通常應該處理這種情況)不適用於我。
我的解決辦法是增加一個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.");
}
}
}
重要的是,你不僅設置計劃,HTTPS,但也ProxyPort沒有從春天啓動所有內部重定向路由到端口80
希望幫助:-)
你有一個安全的應用程序(是春季安全的類路徑和它攔截你的請求)?請注意,即使這樣,重定向也不是自動的(Spring Security與HSTS協同工作,要求客戶端理解並遵守頭文件中的指令)。 –
嗨。你解決了這個問題嗎?我們正面臨類似的問題。我們有一個ec2負載均衡器,終止ssl並使用http回到Spring啓動應用程序。我們可以從負載均衡器中刪除https監聽器,但我們寧願做一個重定向到https。 – hermansen
[Spring Boot重定向HTTP到HTTPS]的可能重複(http://stackoverflow.com/questions/26655875/spring-boot-redirect-http-to-https) –