为了账号安全,请及时绑定邮箱和手机立即绑定

在 DropWizard 中禁用 Swagger Bundle

在 DropWizard 中禁用 Swagger Bundle

隔江千里 2021-09-29 11:03:24
我希望根据配置值在生产环境中禁用 swagger 功能/端点。我该怎么办?我相信实现这一点的最佳方法不是在 DropWizard 应用程序首次启动时执行 initialize 方法期间添加包。此解决方案的问题是您无法访问从 YAML/YML 文件中的值填充的配置获取方法。当我们的应用程序进入 run 方法时,这些值是可用的。这是我的应用程序类中的初始化方法@Overridepublic void initialize(Bootstrap<Configuration> bootstrap) {    LOGGER.debug("initialize");    bootstrap.setConfigurationSourceProvider(new SubstitutingSourceProvider(bootstrap.getConfigurationSourceProvider(),            new EnvironmentVariableSubstitutor(false)));    bootstrap.addBundle(new SwaggerBundle<Configuration>() {        @Override        protected SwaggerBundleConfiguration getSwaggerBundleConfiguration(Configuration configuration) {            return configuration.swaggerBundleConfiguration;        }    });}如果我需要澄清更多,请告诉我。
查看完整描述

2 回答

?
紫衣仙女

TA贡献1839条经验 获得超15个赞

您可以在生产中设置环境变量并使用它来决定是否包含 SwaggerBundle。例如:


if (!"prod".equalsIgnoreCase(System.getenv("ENVIRONMENT"))) {

  bootstrap.addBundle(new SwaggerBundle<Configuration>() { ... }

}


查看完整回答
反对 回复 2021-09-29
?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

我当时使用的是旧版本的 DropWizard。


更新后,有新的方法可用,包括setIsEnabled()


这是为了解决问题而添加的内容。


bootstrap.addBundle(new SwaggerBundle<Configuration>() {

        @Override

        protected SwaggerBundleConfiguration getSwaggerBundleConfiguration(Configuration configuration) {

            if(!configuration.getSwaggerEnabled()){

                configuration.swaggerBundleConfiguration.setIsEnabled(false);

            }

            return configuration.swaggerBundleConfiguration;

        }

    });

}


查看完整回答
反对 回复 2021-09-29
  • 2 回答
  • 0 关注
  • 139 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信