- Swagger文档作为后端接口调用重要的工具之一,下面是文档调用的详细代码
import com.github.xiaoymin.swaggerbootstrapui.annotations.EnableSwaggerBootstrapUI;
import io.swagger.annotations.Api;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
import org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.ApiKey;
import springfox.documentation.service.AuthorizationScope;
import springfox.documentation.service.SecurityReference;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spi.service.contexts.SecurityContext;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
import java.util.ArrayList;
import java.util.List;
/**
* Swagger 接口文档配置类
*
* @author
* @date 2023/6/17
*/
@EnableSwaggerBootstrapUI
@EnableSwagger2
@Configuration
public class SwaggerConfig extends WebMvcConfigurationSupport {
/**
* 配置扫描的api控制包路径
* 这里配置的是你后端框架controller类对应的路径
*/
private static final String BASE_PACKAGE = "xxxxxxxxxxxxxxx.controller";
/**
* 服务器路径
* 代码部署服务的路径,选添,可以不写
*/
private static final String SERVICE_URL = "xxxxxxxxx";
/**
* 配置swagger文档
*
* @return docket 对象
*/
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
// 设置扫描基础包
.apis(RequestHandlerSelectors.basePackage(BASE_PACKAGE))
// 扫描使用Api注解的控制器
.apis(RequestHandlerSelectors.withClassAnnotation(Api.class))
.paths(PathSelectors.any())
.build()
//添加登录认证
//这里下面两行代码已经相关下面包可以注释掉,这里是配置的Swagger文档登录验证,需要在application.yml文件中进行相关的配置,配置信息见后面详细情况
.securitySchemes(securitySchemes())
.securityContexts(securityContexts());
}
@Bean
public RequestMappingInfoHandlerMapping requestMapping() {
return new RequestMappingHandlerMapping();
}
/**
* 配置 api 文档信息
*
* @return 文档信息
*/
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
// 页面标题(自由发挥)
.title("xxxxx")
// API描述
.description("自由发挥")
// 创建路径
.termsOfServiceUrl(SERVICE_URL)
.version("1.0.0")
.build();
}
/**
* 解决 swagger 静态资源 404问题
*
* @param registry 资源路径
*/
@Override
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
// 解决静态资源无法访问
registry.addResourceHandler("/**")
.addResourceLocations("classpath:/static/");
// 解决swagger无法访问
registry.addResourceHandler("/swagger-ui.html")
.addResourceLocations("classpath:/META-INF/resources/");
// 解决swagger的js文件无法访问
registry.addResourceHandler("/webjars/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/");
// 解决swagger-bootstrap 无法访问
registry.addResourceHandler("doc.html").
addResourceLocations("classpath:/META-INF/resources/");
}
private List<ApiKey> securitySchemes() {
//设置请求头信息
List<ApiKey> result = new ArrayList<>();
ApiKey apiKey = new ApiKey("Authorization", "Authorization", "header");
result.add(apiKey);
return result;
}
private List<SecurityContext> securityContexts() {
//设置需要登录认证的路径
List<SecurityContext> result = new ArrayList<>();
// 所有请求路径
result.add(getContextByPath("/.*"));
return result;
}
private SecurityContext getContextByPath(String pathRegex) {
return SecurityContext.builder()
.securityReferences(defaultAuth())
.forPaths(PathSelectors.regex(pathRegex))
.build();
}
private List<SecurityReference> defaultAuth() {
List<SecurityReference> result = new ArrayList<>();
AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
authorizationScopes[0] = authorizationScope;
result.add(new SecurityReference("Authorization", authorizationScopes));
return result;
}
}
- application.yml进行swagger配置信息
## 开启 Swagger的 Basic认证功能,默认是false
swagger:
# 是否关闭 swagger接口文档访问
# production: true
basic:
# 开启简单用户验证
enable: true
# 用户名(自由发挥)
username: xx
# 用户密码(自由发挥)
password: xx