Swagger 2.x 过滤器未执行

2023-12-06

我正在 Jersey 2.34 Web 服务中使用 Swagger 2.x/OpenAPI 3.0 (io.swagger.v3.oas.*) 记录 API。 我扩展了 io.swagger.v3.core.filter.SpecFilter 来实现操作(方法)的自定义过滤以在 API 文档中显示。

import io.swagger.v3.core.filter.OpenAPISpecFilter;
import io.swagger.v3.core.filter.SpecFilter;
import io.swagger.v3.oas.models.Operation;

public class ApiAuthorizationFilterImpl extends SpecFilter {

@Override
protected Operation filterOperation(OpenAPISpecFilter filter, Operation operation, String resourcePath, String key, Map<String, List<String>> params, Map<String, String> cookies, Map<String, List<String>> headers) {
    System.out.println("Filtering operations: "+operation.getSummary());
}

现在,我无法让这个过滤器工作。在我的 web.xml 中添加过滤器表达式时,

<filter>
   <filter-name>ApiAuthorizationFilter</filter-name>
   <filter-class>my.package.ApiAuthorizationFilterImpl</filter-class>
</filter>
    
<filter-mapping>
   <filter-name>ApiAuthorizationFilter</filter-name>
   <url-pattern>/*</url-pattern>
</filter-mapping>

该服务未启动但失败

06-Jul-2021 13:01:36.592 SEVERE [http-nio-8080-exec-27] org.apache.catalina.core.StandardContext.filterStart Exception starting filter [ApiAuthorizationFilter]
        java.lang.ClassCastException: class my.package.ApiAuthorizationFilterImpl cannot be cast to class javax.servlet.Filter (my.package.ApiAuthorizationFilterImpl is in unnamed module of loader org.apache.catalina.loader.ParallelWebappClassLoader @395fdbf6; javax.servlet.Filter is in unnamed module of loader java.net.URLClassLoader @1ab3a8c8)

当将过滤器添加到 jersey.config.server.provider.classnames 时,与其他过滤器一样,它似乎没有被选中。

<servlet>
    <init-param>
      <param-name>jersey.config.server.provider.classnames</param-name>
      <param-value>my.package.ApiAuthorizationFilterImpl;</param-value>
    </init-param>
</servlet>

尽管有不同方法的示例,但我确实无法找到解决方法。 执行此过滤器的正确方法是什么,或者实现此过滤的另一种方法是什么?


既然我现在可以弄清楚这一点,我将把它发布在这里作为答案。

我通过深入研究 Swagger/OpenAPI 源代码意识到,这个过滤器应该写成

import io.swagger.v3.core.filter.AbstractSpecFilter;
import io.swagger.v3.core.model.ApiDescription;
import io.swagger.v3.oas.models.Operation;

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) {
   }
}
    

然后将其作为 filterClass 添加到 openapi.yaml 文档中来执行

prettyPrint: true
cacheTTL: 0
readAllResources: false
filterClass: my.package.ApiAuthorizationFilterImpl 
openAPI:
  info:
...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Swagger 2.x 过滤器未执行 的相关文章

随机推荐

  • 一个广泛的项目:将音频从麦克风流式传输到 Android 设备

    我想从蓝牙麦克风获取音频输入并将其大声输出 就像扩音器或简单的 PA 系统一样 并实时播出 为此 我使用 AudioRecord 和 AudioTrack 类 因为 MediaRecorder 和 MediaPlayer 写入和读取外部文件
  • JavaScript 或 jQuery 能否根据多个条件对 JSON 数组进行排序?

    我有一个自动完成列表的潜在结果的 JSON 数组 该列表定义为 var fundList there s lots more than this name Pension Managed Fund 1 name Managed Proper
  • jQuery:form.submit(fn) 不适用于 Asp.net?

    我试图将事件处理程序附加到 asp net 渲染页面上的 form submit 但没有成功 我想拦截每个回发 以及文档 说我应该可以 难道我做错了什么 document ready function form submit functio
  • mvc razor 可编辑 DropDownList

    我正在寻找一个代码来使下拉列表在 MVC razor 中可编辑 Html DropDownList 提供标准选择列表 但值不可编辑 我尝试了教程中的示例 但它似乎不起作用 首先需要在页面中添加脚本引用 如果您在服务器上托管此脚本 您只需在下
  • 我的PHP时差功能可以改进吗?

    下面是我的函数 它将采用时间戳并以以下格式告诉您从现在开始已经过去的时间23天3小时4分6秒 主要问题是在我的网站上 我使用 mysql 的 DATETIME 而不是 TIMESTAMP 因此要使用此函数 我必须将日期时间从 mysql 转
  • 如何编写php函数

    我想知道如何用 c 编写 php 函数 比如strtoupper 如果有教程请放在这里 thanks 要用 C 语言编写一个可以从 PHP 中使用的函数 您必须编写一个扩展 不幸的是 关于可用的信息并不多 尽管如此 通过搜索我的书签 以下是
  • 推送下一个视图时的活动指示器 - didSelectRowAtIndexPath

    我只能在 iPhone 应用程序中成功推送下一个视图 但是 导致下一个视图检索数据来填充UITableViews 有时等待时间可能是几秒钟或稍长 具体取决于连接情况 在此期间 用户可能会认为应用程序已冻结等 因此 为了解决这个问题 我认为实
  • Android API 级别 2.3.3 之前的 setType("message/rfc822") 意图

    我的设置类型有问题 消息 rfc822 用于发送电子邮件的意图带文件附件 on 安卓模拟器 我必须使用 setType message rfc822 因为该文件没有标准 MIME 类型 SQLite 数据库 并且我试图避免选择列表中的大量应
  • 保存特定于应用程序的数据,即使在应用程序删除后也能保留

    有没有一种方法可以在应用程序卸载后保留一些数据 并且在应用程序再次安装后可以检索 我找到了 NSUserDefault 但我不确定 请指教 let defaults NSUserDefaults standardUserDefaults d
  • 无法在 Excel 自定义函数中获取 POST 请求

    我们目前正在应用程序中实现自定义功能 但无法使 POST 请求正常工作 我们尝试过什么 使用 fetch 进行 POST 确切的功能适用于最新的 Chrome 使用 axios 进行 POST 并向下转译 确切的功能适用于最新的 Chrom
  • Passport.js 中的用户名或密码失败消息

    我使用 Passport js 在 Express 中创建了一个登录名 现在我已经完成了所有设置 当用户名和密码正确时 它将重定向到用户页面 但现在我想在凭据不正确时显示一条消息 现在它会导致一个空白页面 并自动显示 未经授权 消息 这是我
  • Java正则表达式匹配器不匹配

    我的字符串 a href https MYURL browse TEST 53 FOO BAR a Code Pattern pattern Pattern compile browse gt Matcher matcher pattern
  • 有没有办法通过node.js直接读取Google Cloud Datastore存储桶中的JSON文件内容,而无需事先下载?

    我是一名 Python 开发人员 但我现在正在从事的项目的情况迫使我在 Node js 中找到解决方案 我已经检查了文档在类File中 我有这个方法 createReadStream 但谁强迫我在读取之前先下载到本地 然而 我搜索的解决方案
  • 如何在不杀死父进程的情况下杀死所有子进程

    我有一个脚本 它在开始时运行后台进程 然后在最后需要停止该后台进程及其子进程 然后执行一些其他任务等 然后在必要时返回错误代码 我该怎么做呢 我看过几个如何杀死整个树 包括父进程 的示例 例如kill 0 但我希望主脚本继续运行并返回正确的
  • 无法从 Google Compute Engine 元数据服务检索令牌。状态:404

    我正在尝试设置 Cloud SQL 代理作为我的 GKE 集群中的 sidecar 运行 配置是通过 Terraform 完成的 我已经设置了工作负载身份 所需的服务帐户等 从 GKE 集群内启动 cloud sql proxy 时 kub
  • 调整公式数组中的公式

    我有以下公式 我想将其输入到 Formulaarray 中 但由于大小限制而无法这样做 VLOOKUP MIN IF ABS S AT Reports Abhor Ganganagar 1 1550 A B xls 1 1550 A B C
  • 在 Python 中一次选择多个元素迭代列表

    我有一个列表 我想从中迭代一定长度的切片 尽可能最大程度地相互重叠 例如 gt gt gt seq ABCDEF gt gt gt join x for x in zip seq seq 1 seq 2 ABC BCD CDE DEF 换句
  • AWS服务通过校验和验证S3中文件的数据完整性?

    确保 S3 中的文件如其所声称的那样的一种方法是下载该文件 获取其校验和 并将结果与 您期望的校验和进行匹配 AWS 是否提供任何允许这种情况发生的服务without用户需要先下载文件吗 即理想情况下 一个简单的请求 url 提供 S3 文
  • 在 Scrapy 中使用经过身份验证的会话进行爬网

    In my 上一个问题 我对我的问题不是很具体 使用 Scrapy 进行经过身份验证的会话进行抓取 希望能够从更一般的答案中推断出解决方案 我可能应该用这个词crawling 所以 到目前为止 这是我的代码 class MySpider C
  • Swagger 2.x 过滤器未执行

    我正在 Jersey 2 34 Web 服务中使用 Swagger 2 x OpenAPI 3 0 io swagger v3 oas 记录 API 我扩展了 io swagger v3 core filter SpecFilter 来实现