Search code examples
httpsoauth-2.0amazon-elastic-beanstalkratpack

ratpack: implementing a custom PublicAddress to force https


I was on a pac4j mail thread discussing why the redirect url ratpack-pac4j uses is using http even when the original page request is served over https. I did some digging and it looks like ratpack-pac4j is using the InferringPublicAddress. This works for local development, but because my elasticbean host proxies 443 to 80, ratpack-pac4j thinks it's over http and uses http for the redirect url. I want this call to be over https when on the server.

I'm trying to register a custom PublicAddress class that always returns http in development mode, but https in production mode:

        .registry(Guice.registry(b -> { 
            b
                .module(SessionModule.class)
                .module(ThymeleafModule.class, conf -> conf.templatesMode("LEGACYHTML5"))
                .add(PublicAddress.class, ForcedHttpsPublicAddress.create()); //PublicAddress.class, PublicAddress.inferred("https"));
        }))

...

static private class ForcedHttpsPublicAddress implements PublicAddress
{
    static ForcedHttpsPublicAddress create() {
        return new ForcedHttpsPublicAddress();
    }
    ForcedHttpsPublicAddress() {
    }
}

But when I call ctx.get(PublicAddress.class), it's still returning InferringPublicAddress. Am I registering the custom PublicAddress incorrectly?


Solution

  • Got help on the Ratpack forum. I needed to bind it instead of add it.

    .bind(PublicAddress.class, ForcedHttpsPublicAddress.class)