在 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 重定向的主要内容,如果未能解决你的问题,请参考以下文章
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 堆栈进行哪些更改?