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

时间:2015-05-14 04:40:45

标签: amazon-web-services amazon-ec2 spring-security spring-boot amazon-elb

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

AWS ELB配置为重定向

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

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

Spring security snippet:

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

我们正在进入重定向循环,这是有道理的。

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

有关如何使用AWS ELB运行此功能的任何想法

2 个答案:

答案 0 :(得分:3)

看起来这样做了诀窍:

@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);  
        }
    });

}

}

答案 1 :(得分:2)

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

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