我的回答是有点晚了,但我刚刚有这个问题,要张贴这为我工作的解决方案。
最初,我认为将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) –