配置 Swagger 带 token 访问的两种方式

推荐使用全局的方式

1. 每个接口单独传

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import com.google.common.collect.Lists;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.ParameterBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.schema.ModelRef;
import springfox.documentation.service.*;
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;

/**
* @Description: swagger配置类
* @author: Gao Hang Hang
* @date 2019/01/14 18:42
*/
@Configuration
@EnableSwagger2
@EnableWebMvc
public class SwaggerConfig {

public static final String AUTHORIZATION_HEADER = "Access-Token";
public static final String DEFAULT_INCLUDE_PATTERN = "/api/.*";


/**
* TODO
* 可以根据配置读取是否开启swagger文档,针对测试与生产环境采用不同的配置
*/
private boolean isSwaggerEnable = true;

//是否开启swagger,正式环境一般是需要关闭的,可根据springboot的多环境配置进行设置
@Value(value = "${swagger.enabled}")
Boolean swaggerEnabled;

@Bean
public Docket createRestApi() {
ParameterBuilder ticketPar = new ParameterBuilder();
List<Parameter> pars = new ArrayList<Parameter>();
ticketPar.name(AUTHORIZATION_HEADER).description("user ticket")//Token 以及Authorization 为自定义的参数,session保存的名字是哪个就可以写成那个
.modelRef(new ModelRef("string")).parameterType("header")
.required(false).build(); //header中的ticket参数非必填,传空也可以
pars.add(ticketPar.build()); //根据每个方法名也知道当前方法在设置什么参数

return new Docket(DocumentationType.SWAGGER_2)
//.groupName("group")
.enable(swaggerEnabled)
.apiInfo(apiInfo()).select()
// 对所有该包下的Api进行监控,如果想要监控所有的话可以改成any()
//.apis(RequestHandlerSelectors.basePackage("com.iscas"))
.apis(RequestHandlerSelectors.any())
// 对所有路径进行扫描
.paths(PathSelectors.any())
.build()
.globalOperationParameters(pars);
}

/**
* @return 生成文档说明信息
*/
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("XXXX系统")
.description("描述")
//.termsOfServiceUrl("http://gaohanghang.github.io")
.license("Apache 2.0")
.licenseUrl("http://www.apache.org/licenses/LICENSE-2.0")
.version("2.0.0").build();
}

}

效果:

image.png

2. 全局Token

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
import com.google.common.collect.Lists;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.ParameterBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.schema.ModelRef;
import springfox.documentation.service.*;
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;

/**
* @Description: swagger配置类
* @author: Gao Hang Hang
* @date 2019/01/14 18:42
*/
@Configuration
@EnableSwagger2
@EnableWebMvc
public class SwaggerConfig {

public static final String AUTHORIZATION_HEADER = "Access-Token";
public static final String DEFAULT_INCLUDE_PATTERN = "/api/.*";


/**
* TODO
* 可以根据配置读取是否开启swagger文档,针对测试与生产环境采用不同的配置
*/
private boolean isSwaggerEnable = true;

//是否开启swagger,正式环境一般是需要关闭的,可根据springboot的多环境配置进行设置
@Value(value = "${swagger.enabled}")
Boolean swaggerEnabled;

@Bean
public Docket createRestApi() {
ParameterBuilder ticketPar = new ParameterBuilder();
List<Parameter> pars = new ArrayList<Parameter>();
ticketPar.name(AUTHORIZATION_HEADER).description("user ticket")//Token 以及Authorization 为自定义的参数,session保存的名字是哪个就可以写成那个
.modelRef(new ModelRef("string")).parameterType("header")
.required(false).build(); //header中的ticket参数非必填,传空也可以
pars.add(ticketPar.build()); //根据每个方法名也知道当前方法在设置什么参数

return new Docket(DocumentationType.SWAGGER_2)
//.groupName("group")
.enable(swaggerEnabled)
.apiInfo(apiInfo()).select()
// 对所有该包下的Api进行监控,如果想要监控所有的话可以改成any()
//.apis(RequestHandlerSelectors.basePackage("com.iscas"))
.apis(RequestHandlerSelectors.any())
// 对所有路径进行扫描
.paths(PathSelectors.any())
.build()
//.globalOperationParameters(pars);
.securityContexts(Lists.newArrayList(securityContext()))
.securitySchemes(Lists.newArrayList(apiKey()));
}

private ApiKey apiKey() {
return new ApiKey(AUTHORIZATION_HEADER , AUTHORIZATION_HEADER, "header");
}

private SecurityContext securityContext() {
return SecurityContext.builder()
.securityReferences(defaultAuth())
//.forPaths(PathSelectors.regex(DEFAULT_INCLUDE_PATTERN))
.forPaths(PathSelectors.regex("^(?!auth).*$"))
.build();
}

List<SecurityReference> defaultAuth() {
AuthorizationScope authorizationScope
= new AuthorizationScope("global", "accessEverything");
AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
authorizationScopes[0] = authorizationScope;
return Lists.newArrayList(
new SecurityReference(AUTHORIZATION_HEADER, authorizationScopes));
}

/**
* @return 生成文档说明信息
*/
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("XXXX系统")
.description("描述")
//.termsOfServiceUrl("http://gaohanghang.github.io")
.license("Apache 2.0")
.licenseUrl("http://www.apache.org/licenses/LICENSE-2.0")
.version("2.0.0").build();
}

}
打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2015-2023 高行行
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信