在 AWS ELB 后面使用嵌入式 Tomcat 的 Spring Boot - HTTPS 重定向

Posted

技术标签:

【中文标题】在 AWS ELB 后面使用嵌入式 Tomcat 的 Spring Boot - HTTPS 重定向【英文标题】:Spring Boot with Embedded Tomcat behind AWS ELB - HTTPS redirect 【发布时间】:2015-07-25 14:21:43 【问题描述】:

在 EC2 实例上运行 Spring Boot 应用程序端口 8080。

AWS ELB 配置为重定向

     80 -> 8080
     443 (SSL termination happens here) -> 8080

应用程序使用 Spring Security,如果您的用户到达 http://example.com,它将重定向到 .我想登录页面以使用 SSL。

Spring 安全 sn-p:

 http.requiresChannel().antMatchers("/login", "/logout").requiresSecure();

我们遇到了重定向循环,这是有道理的。

对于 Spring Boot 应用程序,看起来所有请求都发送到非安全端口 8080,它重定向到 https://example.com,通过 ELB 并再次在 8080 上获取请求

关于如何使用 AWS ELB 运行此程序的任何想法?

【问题讨论】:

【参考方案1】:

看起来这成功了:

@Component
public class TomcatCustomizer implements EmbeddedServletContainerCustomizer 

@Override
public void customize(ConfigurableEmbeddedServletContainer container) 
    TomcatEmbeddedServletContainerFactory tomcat = (TomcatEmbeddedServletContainerFactory) container;
    tomcat.addConnectorCustomizers(new TomcatConnectorCustomizer() 
        @Override
        public void customize(Connector connector) 
            connector.setSecure(true);  
        
    );


【讨论】:

【参考方案2】:

您必须instantiate your own EmbeddedServletContainerFactory 并将此容器的连接器上的secure 属性设置为true。之后,您的 Ant 匹配器规则将起作用。

或者,您可以查看 Github 上的 Spring Boot source code,添加用于读取名为 server.channel.secure 的布尔配置属性的代码,将其设置在嵌入式 Tomcat 连接器上,然后提交拉取请求以供 Spring 团队合并到下一个版本。

【讨论】:

感谢您指出安全属性 .. 看起来有相当简单的方法来设置它。我在上面发布了答案。

以上是关于在 AWS ELB 后面使用嵌入式 Tomcat 的 Spring Boot - HTTPS 重定向的主要内容,如果未能解决你的问题,请参考以下文章

在 ELB 后面可访问的 AWS EB url

https / SSL到AWS ELB和ELB到Tomcat非SSL / HTTP

如何为 AWS Elb 后面的 reactJs SPA 重定向 http 到 https?

如何使 ChromeCast 与在 AWS ELB 后面运行的发送者应用程序一起工作

使用 AWS Certificate Manager (ACM) 和在 ELB 后面运行的 EC2 服务器通过 HTTPS 处理会话需要 LEMP 堆栈进行哪些更改?

当您的实例位于 ELB 之后时,您如何为 AWS 建立维护页面?