如何从Swagger UI中隐藏Spring Security OAuth2端点?

时间:2015-06-10 00:39:33

标签: spring-mvc spring-security-oauth2 swagger-ui

我有一个使用Spring Boot构建的API应用程序。我使用 swagger-springmvc v0.9.5插件以及Swagger UI生成API方法的实时文档和交互前端。

我最近向应用程序介绍了Spring安全性和OAuth。这引入了Swagger UI中出现的更多部分:

  • authorization-endpoint ,其/oauth/authorize路径下有一堆HTTP操作
  • check-token-endpoint ,其/oauth/check_token路径下有一堆HTTP操作
  • whitelabel-approval-endpoint ,其/oauth/confirm_access路径下有一堆HTTP操作
  • whitelabel-error-endpoint ,其/oauth/error路径下有一堆HTTP操作

我可以理解它们的用途,但我不希望它们出现在我的Swagger UI前端。我该如何隐藏它们?

com.mangofactory.swagger.plugin.SwaggerSpringMvcPlugin的配置确实提供了includePatterns()方法,但无法排除模式。使用includePatterns()每次有人向API添加方法时,都需要记住将其添加到那里,这并不理想。我没有所有API方法的公共前缀,我可以使用includePatterns()和。

2 个答案:

答案 0 :(得分:0)

我有同样的问题。 我通过改变Docket创建参数来解决它。 我正在使用

@Bean
public Docket oAuthService() {
    return new Docket(DocumentationType.SWAGGER_2)
            .select()
            .apis(RequestHandlerSelectors.any())
            .paths(PathSelectors.any())
            .build()
            .pathMapping("/")
            .directModelSubstitute(LocalDate.class,
                    String.class)
            .genericModelSubstitutes(ResponseEntity.class)
            .alternateTypeRules(
                    newRule(typeResolver.resolve(DeferredResult.class,
                            typeResolver.resolve(ResponseEntity.class, WildcardType.class)),
                            typeResolver.resolve(WildcardType.class)))
            .useDefaultResponseMessages(false)
            .globalResponseMessage(RequestMethod.GET,
                    newArrayList(new ResponseMessageBuilder()
                            .code(500)
                            .message("500 message")
                            .responseModel(new ModelRef("Error"))
                            .build()))
            .securitySchemes(newArrayList(apiKey()))
            .securityContexts(newArrayList(securityContext()))
            .enableUrlTemplating(true)
            .tags(new Tag("Oauth Service", "Oauth Service"));
}

这导致所有spring-oauth端点成为我的swagger规范的一部分。 我更改了注册的api以使用我的basePackage而不是any()。 像这样:

.apis(RequestHandlerSelectors.basePackage("my.base.package.name"))

答案 1 :(得分:0)

您只需接受除/oauth.*

之外的所有路径即可
.select()
.paths(input ->
    !PathSelectors.regex("/oauth.*").apply(input) &&
    PathSelectors.any().apply(input))
.build()