我已经将我的Jersey REST Service文档升级到swagger openapi v3。
现在,我想介绍一个根据用户授权过滤方法的方法,以便只在swagger-ui/ openapi.yaml文档中显示特定的API方法。我最接近的方法是使用一个扩展io.swagger.v3.core.filter.AbstractSpecFilter的过滤器类ApiAuthorizationFilterImpl。
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中。
<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所述
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或其他方式)?
发布于 2021-07-22 17:41:47
正如我在这里发现的那样,必须将filterClass指定为要执行的完全限定的类名:https://stackoverflow.com/a/68482434/3271380
此外,我还必须添加一些变通方法,以使过滤器适用于用户身份验证:
https://stackoverflow.com/questions/65286893
复制相似问题