Swagger2.java 3.13 KB
Newer Older
licc's avatar
licc committed
1 2 3 4 5
package cn.wisenergy.web.config.swagger;


import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
licc's avatar
licc committed
6
import org.springframework.http.ResponseEntity;
licc's avatar
licc committed
7 8 9 10 11
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.*;
import springfox.documentation.spi.DocumentationType;
licc's avatar
licc committed
12
import springfox.documentation.spi.service.contexts.SecurityContext;
licc's avatar
licc committed
13
import springfox.documentation.spring.web.plugins.Docket;
liqin's avatar
liqin committed
14
import springfox.documentation.swagger2.annotations.EnableSwagger2;
licc's avatar
licc committed
15

licc's avatar
licc committed
16 17 18 19 20
import java.time.LocalDate;
import java.util.List;

import static com.google.common.collect.Lists.newArrayList;

liqin's avatar
liqin committed
21 22
//注解开启 swagger2 功能
@EnableSwagger2
licc's avatar
licc committed
23 24 25 26 27 28 29 30 31 32 33
//注解标示,这是一个配置类,@Configuation注解包含了@Component注解
//可以不用在使用@Component注解标记这是个bean了,
@Configuration
public class Swagger2 {

    /**
     * 通过 createRestApi函数来构建一个DocketBean
     * 函数名,可以随意命名,喜欢什么命名就什么命名
     */
    @Bean
    public Docket createRestApi() {
liqin's avatar
liqin committed
34
        return new Docket(DocumentationType.SWAGGER_2)
licc's avatar
licc committed
35 36 37
                .select()
                //控制暴露出去的路径下的实例
                //如果某个接口不想暴露,可以使用以下注解
licc's avatar
licc committed
38 39
                //@ApiIgnore 这样,该接口就不会暴露在 swagger2
                .apis(RequestHandlerSelectors.basePackage("cn.wisenergy.web.admin.controller"))
licc's avatar
licc committed
40
                .paths(PathSelectors.any())
licc's avatar
licc committed
41
                .build()
liqin's avatar
liqin committed
42
                .apiInfo(apiInfo())
licc's avatar
licc committed
43 44 45 46 47 48 49
                .pathMapping("/")
                .directModelSubstitute(LocalDate.class, String.class)
                .genericModelSubstitutes(ResponseEntity.class)
                .useDefaultResponseMessages(false)
                .securitySchemes(newArrayList(apiKey()))
                .securityContexts(newArrayList(securityContext()))
                .enableUrlTemplating(false);
licc's avatar
licc committed
50 51 52 53 54
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                //页面标题
licc's avatar
licc committed
55
                .title("Api Documentation")
licc's avatar
licc committed
56
                //描述
licc's avatar
licc committed
57 58 59 60 61 62 63 64
                .description("Api Documentation")
                .contact(new Contact("Danny Lee", "http://blog.51cto.com/7308310", "liqinwyyx@163.com"))
                //版本号
                .version("1.0.0")
                .build();
    }

    private ApiKey apiKey() {
liqin's avatar
liqin committed
65
        return new ApiKey("BearerToken", "token", "header");
licc's avatar
licc committed
66 67 68 69 70
    }

    private SecurityContext securityContext() {
        return SecurityContext.builder()
                .securityReferences(defaultAuth())
liqin's avatar
liqin committed
71
                .forPaths(PathSelectors.regex("/.*"))
licc's avatar
licc committed
72 73
                .build();
    }
licc's avatar
licc committed
74 75

    List<SecurityReference> defaultAuth() {
liqin's avatar
liqin committed
76
        AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
licc's avatar
licc committed
77 78 79 80
        AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
        authorizationScopes[0] = authorizationScope;
        return newArrayList(new SecurityReference("BearerToken", authorizationScopes));
    }
licc's avatar
licc committed
81
}