当在spring boot项目中使用security时,项目的login,logout登录登出接口是使用filter实现的,swagger文档不会展示,那么我们就要使用自定义接口文档.
@Component
@Order(SwaggerPluginSupport.SWAGGER_PLUGIN_ORDER)
public class SwaggerAddtion implements ApiListingScannerPlugin {
@Override
public List<ApiDescription> apply(DocumentationContext context) {
List<ApiDescription> apiDescriptions = new ArrayList<>();
//此处一定要加一个判断 不然每个组下都有该接口
if (context.getGroupName().equals(Constants.ADMIN_API_SWAGGER_GROUP_NAME)) {
apiDescriptions.add(new ApiDescription(
Constants.ADMIN_API_SWAGGER_GROUP_NAME,
Constants.LOGIN_URL,
"用户登录",
"login",
Collections.singletonList(userLogin()),
false
));
}
return apiDescriptions;
}
private Operation userLogin() {
List<RequestParameter> list = new ArrayList<>();
list.add(new RequestParameterBuilder()
.name("password")
.description("密码")
.required(true)
.in(ParameterType.QUERY)
.build()
);
list.add(new RequestParameterBuilder()
.name("username")
.description("用户名")
.required(true)
.in(ParameterType.QUERY)
.build()
);
Set<String> consumes = new HashSet<>();
consumes.add(MediaType.APPLICATION_FORM_URLENCODED_VALUE);
Set<String> produces = new HashSet<>();
produces.add(MediaType.APPLICATION_JSON_VALUE);
Set<String> tags = new HashSet<>();
tags.add("用户登录");
return new OperationBuilder(new CachingOperationNameGenerator())
.method(HttpMethod.POST)
.uniqueId("用户登录2")
.summary("用户登录接口")
.consumes(consumes)
.produces(produces)
.tags(tags)
.requestParameters(list)
.responses(Collections.singleton(
new ResponseBuilder().code("200").description("success").build()))
.build();
}
@Override
public boolean supports(DocumentationType delimiter) {
return DocumentationType.OAS_30.equals(delimiter);
}
}