首页 文章

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

提问于
浏览
2

我有一个使用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

    您所需要的只是接受除 /oauth.* 之外的所有路径

    .select()
    .paths(input ->
        !PathSelectors.regex("/oauth.*").apply(input) &&
        PathSelectors.any().apply(input))
    .build()
    
  • 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 endpoints 成为我的swagger规范的一部分 . 我更改了注册的api以使用我的basePackage而不是any() . 像这样的东西:

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

相关问题