如何在弹簧启动中完全禁用swagger-ui?(/swagger-ui.html应返回 404)

2022-09-01 18:04:34

我读过以下主题: 用弹簧MVC禁用Swagger

我写道:

@Bean
public Docket api() {
    return new Docket(DocumentationType.SWAGGER_2)
            .select()
            .apis(RequestHandlerSelectors.basePackage("com.project.name.controller"))
            .paths(PathSelectors.ant("/api/**"))
            .build()
            .apiInfo(apiInfo())
            .enable(false);
}

但是,如果我尝试访问swagger ui,
我会看到localhost:8080/swagger-ui.htmlenter image description here

它看起来不准确。我可以完全禁用此 URL 吗?例如404或类似的东西。


答案 1

我的答案与前面提供的答案相似,略有不同。我通常会创建一个名为 的单独弹簧配置文件。当我想启用 Swagger 时,我在启动应用程序时传递以下 VM 标志。这是我的Swagger配置的一个例子,swagger-Dspring.profiles.active=swagger

@Profile(value = {"swagger"})
@Configuration
@EnableSwagger2
public class SwaggerConfiguration {
    ...
}

下次当您尝试在没有配置文件的情况下访问时,您将获得一个空的Swagger屏幕,但不是404。swagger-ui.htmlswagger

enter image description here

如果你根本不想加载静态的Swagger UI页面,你可以编写一个简单的控制器,如下所示,

@Profile("!swagger")
@RestController
@Slf4j
public class DisableSwaggerUiController {

    @RequestMapping(value = "swagger-ui.html", method = RequestMethod.GET)
    public void getSwagger(HttpServletResponse httpResponse) throws IOException {
        httpResponse.setStatus(HttpStatus.NOT_FOUND.value());
    }
}

现在,如果您尝试在没有配置文件的情况下访问,您将获得404。swagger-ui.htmlswagger


答案 2

使用swagger 3.0.0版本,您可以添加在相应的环境配置文件中。例如,我已将其添加到以在生产中禁用(在运行应用程序时,必须使用VM参数指定配置文件,例如springfox.documentation.enabled=falseapplication.propertiesapplication-prod.properties-Dspring.profiles.active=prod)


推荐