8e49615bf6e9283ca1d3cf99b8d494d95deb9ba7.svn-base 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. package org.jeecg.config;
  2. import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
  3. import io.swagger.annotations.ApiOperation;
  4. import lombok.extern.slf4j.Slf4j;
  5. import org.jeecg.common.constant.CommonConstant;
  6. import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
  7. import org.springframework.context.annotation.Bean;
  8. import org.springframework.context.annotation.Configuration;
  9. import org.springframework.context.annotation.Import;
  10. import org.springframework.web.bind.annotation.RestController;
  11. import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
  12. import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
  13. import springfox.bean.validators.configuration.BeanValidatorPluginsConfiguration;
  14. import springfox.documentation.builders.ApiInfoBuilder;
  15. import springfox.documentation.builders.ParameterBuilder;
  16. import springfox.documentation.builders.PathSelectors;
  17. import springfox.documentation.builders.RequestHandlerSelectors;
  18. import springfox.documentation.schema.ModelRef;
  19. import springfox.documentation.service.*;
  20. import springfox.documentation.spi.DocumentationType;
  21. import springfox.documentation.spi.service.contexts.SecurityContext;
  22. import springfox.documentation.spring.web.plugins.Docket;
  23. import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc;
  24. import java.util.ArrayList;
  25. import java.util.Collections;
  26. import java.util.List;
  27. /**
  28. * @Author scott
  29. */
  30. @Configuration
  31. @EnableSwagger2WebMvc
  32. @EnableKnife4j
  33. @Import(BeanValidatorPluginsConfiguration.class)
  34. public class Swagger2Config implements WebMvcConfigurer {
  35. /**
  36. *
  37. * 显示swagger-ui.html文档展示页,还必须注入swagger资源:
  38. *
  39. * @param registry
  40. */
  41. @Override
  42. public void addResourceHandlers(ResourceHandlerRegistry registry) {
  43. registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
  44. registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/");
  45. registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
  46. }
  47. /**
  48. * swagger2的配置文件,这里可以配置swagger2的一些基本的内容,比如扫描的包等等
  49. *
  50. * @return Docket
  51. */
  52. @Bean(value = "defaultApi2")
  53. public Docket defaultApi2() {
  54. return new Docket(DocumentationType.SWAGGER_2)
  55. .apiInfo(apiInfo())
  56. .select()
  57. //此包路径下的类,才生成接口文档
  58. .apis(RequestHandlerSelectors.basePackage("org.jeecg"))
  59. //加了ApiOperation注解的类,才生成接口文档
  60. .apis(RequestHandlerSelectors.withClassAnnotation(RestController.class))
  61. .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
  62. .paths(PathSelectors.any())
  63. .build()
  64. .securitySchemes(Collections.singletonList(securityScheme()))
  65. .securityContexts(securityContexts());
  66. //.globalOperationParameters(setHeaderToken());
  67. }
  68. /***
  69. * oauth2配置
  70. * 需要增加swagger授权回调地址
  71. * http://localhost:8888/webjars/springfox-swagger-ui/o2c.html
  72. * @return
  73. */
  74. @Bean
  75. SecurityScheme securityScheme() {
  76. return new ApiKey(CommonConstant.X_ACCESS_TOKEN, CommonConstant.X_ACCESS_TOKEN, "header");
  77. }
  78. /**
  79. * JWT token
  80. * @return
  81. */
  82. private List<Parameter> setHeaderToken() {
  83. ParameterBuilder tokenPar = new ParameterBuilder();
  84. List<Parameter> pars = new ArrayList<>();
  85. tokenPar.name(CommonConstant.X_ACCESS_TOKEN).description("token").modelRef(new ModelRef("string")).parameterType("header").required(false).build();
  86. pars.add(tokenPar.build());
  87. return pars;
  88. }
  89. /**
  90. * api文档的详细信息函数,注意这里的注解引用的是哪个
  91. *
  92. * @return
  93. */
  94. private ApiInfo apiInfo() {
  95. return new ApiInfoBuilder()
  96. // //大标题
  97. .title("Jeecg-Boot 后台服务API接口文档")
  98. // 版本号
  99. .version("1.0")
  100. // .termsOfServiceUrl("NO terms of service")
  101. // 描述
  102. .description("后台API接口")
  103. // 作者
  104. .contact(new Contact("北京国炬信息技术有限公司","www.jeccg.com","jeecgos@163.com"))
  105. // .contact("JEECG团队")
  106. .license("The Apache License, Version 2.0")
  107. .licenseUrl("http://www.apache.org/licenses/LICENSE-2.0.html")
  108. .build();
  109. }
  110. /**
  111. * 新增 securityContexts 保持登录状态
  112. */
  113. private List<SecurityContext> securityContexts() {
  114. return new ArrayList(
  115. Collections.singleton(SecurityContext.builder()
  116. .securityReferences(defaultAuth())
  117. .forPaths(PathSelectors.regex("^(?!auth).*$"))
  118. .build())
  119. );
  120. }
  121. private List<SecurityReference> defaultAuth() {
  122. AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
  123. AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
  124. authorizationScopes[0] = authorizationScope;
  125. return new ArrayList(
  126. Collections.singleton(new SecurityReference(CommonConstant.X_ACCESS_TOKEN, authorizationScopes)));
  127. }
  128. }