vladsfl
vladsfl

Reputation: 637

Spring Boot with Embedded Tomcat behind AWS ELB - HTTPS redirect

Running Spring boot application port 8080 on EC2 instance.

AWS ELB configured to redirect

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

Application uses Spring Security and if you user arrives to http://example.com it will redirect to . I would like to login page to use SSL.

Spring security snippet:

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

We are running into redirect loop which makes sense.

To Spring Boot application it looks like all requests are made to non-secured port 8080, it redirects to https://example.com, goes through ELB and again gets request on 8080

Any ideas on how to run this with AWS ELB ???

Upvotes: 2

Views: 3358

Answers (2)

vladsfl
vladsfl

Reputation: 637

Looks like this did the trick:

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

}

}

Upvotes: 3

manish
manish

Reputation: 20135

You will have to instantiate your own EmbeddedServletContainerFactory and set the secure property on the connector for this container to true. After that your Ant matcher rule will work.

Alternatively, you can check out the Spring Boot source code available on Github, add code for reading a boolean configuration property called server.channel.secure, setting it on the embedded Tomcat connector and submit a pull request for the Spring team to incorporate into the next release.

Upvotes: 2

Related Questions