gpt4 book ai didi

spring - 如何使用 Spring Boot 自动重定向到 https

转载 作者:IT老高 更新时间:2023-10-28 13:59:29 27 4
gpt4 key购买 nike

如何轻松配置嵌入式 tomcat 服务器以将所有 http 流量重定向到 https?我在弹性负载均衡器后面的 ec2 实例上运行 Spring Boot。我已将 ELB 配置为为我处理 ssl(这很棒),并将 X-FORWARDED-PROTO header 设置为“https”。我想检测何时未设置,并重定向用户以强制他们使用 https(如果尚未设置)。

到目前为止,我尝试将以下内容添加到我的 application.properties 文件中,但没有成功:

server.tomcat.protocol-header=x-forwarded-proto
security.require-ssl=true

最佳答案

我的回答有点晚了,但我最近遇到了这个问题,想发布一个对我有用的解决方案。

最初,我认为将 tomcat 设置为使用 X-Forwarded header 就足够了,但是通常应该处理这种情况的 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.");
}
}
}

重要的是,您不仅将 Scheme 设置为 https,还设置了 ProxyPort,没有它,来自 Spring Boot 的所有内部重定向都被路由到端口 80。

关于spring - 如何使用 Spring Boot 自动重定向到 https,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22625699/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com