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