Helius
2021-06-29 5252d1396e21a16774be699a5ba1c8d39c14a22e
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
package com.xzx.gc.config;
 
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.context.annotation.Profile;
import org.springframework.http.HttpHeaders;
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.swagger.web.ApiKeyVehicle;
import springfox.documentation.swagger.web.SecurityConfiguration;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;
 
/**
 * @author: zhongzan
 * @create: 2019-06-19 17:06
 * @description:
 */
@Configuration
@EnableSwagger2
@Profile(value = {"dev","test","check", "xctest"})
public class SwaggerConfig {
 
 
    @Value("${info.app.name}")
    private String appName;
 
 
    @Bean
    public Docket createRestApi() {
 
        List<Parameter>  aParameters=getParas();
 
        Docket docket = new Docket(DocumentationType.SWAGGER_2)
                .groupName(appName)
                .apiInfo(apiInfo(appName))
                //不使用swagger默认状态码
                .useDefaultResponseMessages(false)
                //设置自定义异常
                // .globalResponseMessage(RequestMethod.POST,responseMessageList)
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.xzx.gc"))
                //指定需要生成的文档的接口的路径
                // .paths(PathSelectors.regex("/(third|upgradeRecord|user|accountInfo|income|withdrawal).*"))
                .paths(PathSelectors.any())
                .build().globalOperationParameters(aParameters);
        //设置token验证
        docket.securitySchemes(Lists.newArrayList(apiKey()));
        //指定路径需要验证
        docket.securityContexts(Lists.newArrayList(securityContext()));
        //全局忽略参数类型
        docket.ignoredParameterTypes(HttpServletRequest.class, HttpServletResponse.class);
        return  docket;
    }
 
 
    /**
     * 设置公共参数
     * @return
     */
    private  List<Parameter>  getParas(){
        List<Parameter> aParameters = new ArrayList<Parameter>();
        ParameterBuilder aParameterBuilder = new ParameterBuilder();
        aParameterBuilder.name("swagger").description("系统参数:swagger模式不拦截").defaultValue("true").modelRef(new ModelRef("String")).parameterType("header").required(true).build();
        aParameters.add(aParameterBuilder.build());
 
        aParameterBuilder = new ParameterBuilder();
        aParameterBuilder.name("version").description("系统参数:版本号").defaultValue("v2.1").modelRef(new ModelRef("String")).parameterType("header").required(true).build();
        aParameters.add(aParameterBuilder.build());
 
        aParameterBuilder = new ParameterBuilder();
        aParameterBuilder.name("userId").description("系统参数:用户ID").defaultValue("USER1255012451226095616").modelRef(new ModelRef("String")).parameterType("header").required(true).build();
        aParameters.add(aParameterBuilder.build());
 
        return aParameters;
    }
 
    private SecurityContext securityContext() {
        return SecurityContext.builder()
                .securityReferences(defaultAuth())
                //指定需要Token验证的文档的接口的路径
                .forPaths(PathSelectors.any())
                .build();
    }
 
    List<SecurityReference> defaultAuth() {
        AuthorizationScope authorizationScope
                = new AuthorizationScope("global", "accessEverything");
        AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
        authorizationScopes[0] = authorizationScope;
        return Lists.newArrayList(
                new SecurityReference(HttpHeaders.AUTHORIZATION, authorizationScopes));
    }
 
    @Bean
    SecurityConfiguration security() {
        return new SecurityConfiguration(
                null,
                null,
                null, // realm Needed for authenticate button to work
                null, // appName Needed for authenticate button to work
                "BEARER ",// apiKeyValue
                ApiKeyVehicle.HEADER,
                HttpHeaders.AUTHORIZATION, //apiKeyName
                null);
    }
 
    private ApiInfo apiInfo(String desc) {
        return new ApiInfoBuilder()
                .title("小棕熊")
                .description(desc)
                .termsOfServiceUrl("")
                .contact(new Contact("钟赞","","zan7755@qq.com"))
                .version("1.0")
                .build();
    }
 
 
    private ApiKey apiKey() {
        return new ApiKey(HttpHeaders.AUTHORIZATION, "token", "header");
    }
 
}