# Swagger
**Repository Path**: xiaoxunyao/Swagger
## Basic Information
- **Project Name**: Swagger
- **Description**: No description available
- **Primary Language**: Java
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2021-11-18
- **Last Updated**: 2021-11-18
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Swagger 的食用教程
### 技术
**语言 : [Java](https://www.java.com/zh-CN/)**
**框架 : [SpringBoot](https://spring.io/) + [Swagger](https://swagger.io/)**
**工具 : [Maven](https://mvnrepository.com) + [IDEA](https://www.jetbrains.com/) + [PostMan](https://www.postman.com/) + [Swagger](https://swagger.io/)**
### 说明
```markdown
# 丝袜哥 `Swagger` 是研发的好帮手,可以减少很多后端和前端的沟通的成本,甚至在很多高级的公司,还能够减少后端和测试人员的沟通成本.所以只需要一个项目采用了SpringBoot框架,丝袜哥 `Swagger` 几乎就是必须要选择的组件
# 在之前 Swagger的工具的starter是百花齐放,而现在,终于有了官方的启动工具类,接下来就是快速食用工具
```
### pom依赖
```xml
io.springfox
springfox-boot-starter
3.0.0
io.springfox
springfox-oas
3.0.0
```
### 浏览器访问地址
```url
http://localhost:8181/springboot-swagger/swagger-ui/
```
**有网址说需要添加 `@EnableOpenApi` 注解,但其实是不需要的**

### 关于整合认证(权限)插件
#### 如果用到了`Spring Security` 权限的控制组件,记得要加入白名单
```java
//例如
String[] SWAGGER_WHITELIST = {
"/swagger-ui.html",
"/swagger-ui/*",
"/swagger-resources/**",
"/v2/api-docs",
"/v3/api-docs",
"/webjars/**"
};
httpSecurity.cors()
.antMatchers(SWAGGER_WHITELIST).permitAll();
```
### 但是在某些时候,我们使用了 JWT 这样的中间件 , 就需要在请求接口的时候,在 `Header` 中构造一个token,Swagger 也支持了他们
```java
//基础的配置
/**
* SwaggerConfig
* Swagger 的实体类
* @author HCY
* @since 2020/10/15
*/
@Configuration
public class SwaggerConfig {
@Bean
public Docket createRestApi(){
return new Docket(DocumentationType.SWAGGER_2)
//开启个人信息
.apiInfo(apiInfo())
.select()
.build()
//每一个请求都可以添加header
.globalRequestParameters(globalRequestParameters())
//开启全局的token
.securitySchemes(security());
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
//api文本
.title("晓寻遥 api")
//说明
.description("更多请咨询晓寻遥")
//用户名 + 网址 + 邮箱
.contact(new Contact("晓寻遥" ,
"https://github.com/xiaoxunyao" ,
"2414776185@qq.com"))
//版本
.version("1.0")
//运行
.build();
}
}
```
#### 第一种,通过全局的Auth认证方式
```java
private List security() {
ApiKey apiKey = new ApiKey("Token", "Token", "header");
return Collections.singletonList(apiKey);
}
```

#### 第二种, 每个请求一个token , 适用于 快速过期的JWT模式
```java
private List globalRequestParameters() {
RequestParameterBuilder parameterBuilder = new RequestParameterBuilder()
//每次请求加载header
.in(ParameterType.HEADER)
//头标签
.name("Token")
.required(false)
.query(param -> param.model(model -> model.scalarModel(ScalarType.STRING)));
return Collections.singletonList(parameterBuilder.build());
}
```

# 结束
```markdown
# 不用自己写接口文档了,让前端的小伙伴看了一下 丝袜哥 `Swagger` ,小伙伴说再也不想看我写的接口文档了,我就明白了,用它用它.
# nice
```