当前位置:  开发笔记 > 运维 > 正文

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

如何解决《如何使用SpringBoot自动重定向到https》经验,为你挑选了1个好方法。

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

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

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

Dennis.. 9

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

最初,我认为将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.");
        }
    }
}

重要的是,您不仅要将Scheme设置为https,还要将ProxyPort设置为ProxyPort,否则Spring Boot的所有内部重定向都将路由到端口80.

希望有所帮助:-)



1> Dennis..:

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

最初,我认为将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.");
        }
    }
}

重要的是,您不仅要将Scheme设置为https,还要将ProxyPort设置为ProxyPort,否则Spring Boot的所有内部重定向都将路由到端口80.

希望有所帮助:-)

推荐阅读
ERIK又
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有