首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swagger openapi: openapi.yaml/ swagger-ui中的过滤方法

Swagger openapi: openapi.yaml/ swagger-ui中的过滤方法
EN

Stack Overflow用户
提问于 2020-12-14 17:56:02
回答 1查看 319关注 0票数 1

我已经将我的Jersey REST Service文档升级到swagger openapi v3。

现在,我想介绍一个根据用户授权过滤方法的方法,以便只在swagger-ui/ openapi.yaml文档中显示特定的API方法。我最接近的方法是使用一个扩展io.swagger.v3.core.filter.AbstractSpecFilter的过滤器类ApiAuthorizationFilterImpl。

代码语言:javascript
复制
public class ApiAuthorizationFilterImpl extends AbstractSpecFilter {
    
    @Override
    public Optional<Operation> filterOperation(
            Operation operation,
            ApiDescription api,
            Map<String, List<String>> params,
            Map<String, String> cookies,
            Map<String, List<String>> headers) {

            System.out.println("Operation filter is being executed");
            return Optional.of(operation);
}

我已经将我从jersey过滤器类中使用的过滤器添加到web.xml中。

代码语言:javascript
复制
<servlet>
    <servlet-name>Jersey Web Application</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
      <param-name>jersey.config.server.provider.packages</param-name>
      <param-value>io.swagger.v3.jaxrs2.integration.resources</param-value>
    </init-param>    
    <init-param>
      <param-name>jersey.config.server.provider.classnames</param-name>
      <param-value>com.mapchart.core.ws.swagger.ApiAuthorizationFilterImpl</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>

之后,似乎没有执行过滤器,我将其添加到openapi.yaml中,如here所述

代码语言:javascript
复制
prettyPrint: true
cacheTTL: 0
filterClass: ApiAuthorizationFilterImpl
openAPI:
  info:
    version: '1.0.0'
    title: 'OpenAPI documentation'
  servers:
    - url: '/my-rest-service'

由于这似乎也没有执行过滤器,我想知道如何添加openapi方法的过滤器以显示在openapi.yaml/ swagger-ui中(使用AbstractSpecFilter或其他方式)?

EN

回答 1

Stack Overflow用户

发布于 2021-07-22 17:41:47

正如我在这里发现的那样,必须将filterClass指定为要执行的完全限定的类名:https://stackoverflow.com/a/68482434/3271380

此外,我还必须添加一些变通方法,以使过滤器适用于用户身份验证:

  • 向@Operation方法添加一个自定义参数,在我的例子中,我使用了带有自定义值的SecurityRequirement (使用隐藏参数或@Hidden注解不起作用,因为Swagger将在执行此过滤器之前静态过滤出这些方法)
  • 在执行此过滤器之前执行的ContainerRequestFilter中添加有关用户类型的自定义标头。这样,就可以在ApiAuthorizationFilterImpl类中检索该标头。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65286893

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档