首页 > 解决方案 > ratpack:实现自定义 PublicAddress 以强制 https

问题描述

我在一个 pac4j 邮件线程上讨论为什么即使原始页面请求是通过 https 提供的,ratpack-pac4j 使用的重定向 url 也使用 http。我做了一些挖掘,看起来 ratpack-pac4j 正在使用 InferringPublicAddress。这适用于本地开发,但因为我的 elasticbean 主机代理 443 到 80,ratpack-pac4j 认为它通过 http 并使用 http 作为重定向 url。我希望此调用在服务器上通过 https 进行。

我正在尝试注册一个自定义 PublicAddress 类,该类始终在开发模式下返回 http,但在生产模式下返回 https:

        .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() {
    }
}

但是当我调用 ctx.get(PublicAddress.class) 时,它仍然返回 InferringPublicAddress。我是否错误地注册了自定义 PublicAddress?

标签: httpsoauth-2.0amazon-elastic-beanstalkratpack

解决方案


在 Ratpack 论坛上获得帮助。我需要绑定它而不是添加它。

.bind(PublicAddress.class, ForcedHttpsPublicAddress.class)

推荐阅读