在 DropWizard 中禁用 Swagger Bundle

我希望根据配置值在生产环境中禁用 swagger 功能/端点。


我该怎么办?


我相信实现这一点的最佳方法不是在 DropWizard 应用程序首次启动时执行 initialize 方法期间添加包。


此解决方案的问题是您无法访问从 YAML/YML 文件中的值填充的配置获取方法。当我们的应用程序进入 run 方法时,这些值是可用的。


这是我的应用程序类中的初始化方法


@Override

public 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;

        }

    });

}

如果我需要澄清更多,请告诉我。


隔江千里
浏览 140回答 2
2回答

紫衣仙女

您可以在生产中设置环境变量并使用它来决定是否包含 SwaggerBundle。例如:if (!"prod".equalsIgnoreCase(System.getenv("ENVIRONMENT"))) {&nbsp; bootstrap.addBundle(new SwaggerBundle<Configuration>() { ... }}

犯罪嫌疑人X

我当时使用的是旧版本的 DropWizard。更新后,有新的方法可用,包括setIsEnabled()这是为了解决问题而添加的内容。bootstrap.addBundle(new SwaggerBundle<Configuration>() {&nbsp; &nbsp; &nbsp; &nbsp; @Override&nbsp; &nbsp; &nbsp; &nbsp; protected SwaggerBundleConfiguration getSwaggerBundleConfiguration(Configuration configuration) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(!configuration.getSwaggerEnabled()){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; configuration.swaggerBundleConfiguration.setIsEnabled(false);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return configuration.swaggerBundleConfiguration;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; });}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java