OpenApiConfig.java 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. package com.txz.mall.configurer;
  2. import io.swagger.v3.oas.models.Components;
  3. import io.swagger.v3.oas.models.OpenAPI;
  4. import io.swagger.v3.oas.models.security.SecurityRequirement;
  5. import io.swagger.v3.oas.models.security.SecurityScheme;
  6. import org.springframework.beans.factory.annotation.Value;
  7. import org.springframework.cloud.client.ServiceInstance;
  8. import org.springframework.cloud.client.discovery.DiscoveryClient;
  9. import org.springframework.context.annotation.Bean;
  10. import org.springframework.context.annotation.Configuration;
  11. import io.swagger.v3.oas.models.servers.Server;
  12. import org.springframework.util.CollectionUtils;
  13. import javax.annotation.Resource;
  14. import java.net.InetAddress;
  15. import java.net.UnknownHostException;
  16. import java.util.ArrayList;
  17. import java.util.Collections;
  18. import java.util.List;
  19. @Configuration
  20. public class OpenApiConfig {
  21. // @Value("${server.port}")
  22. // private String mallPort;
  23. @Resource
  24. private DiscoveryClient discoveryClient;
  25. @Bean
  26. public OpenAPI serviceOpenAPI(@Value("${spring.application.name}") String serviceName) {
  27. // String localIp;
  28. //
  29. // {
  30. // try {
  31. // localIp = InetAddress.getLocalHost().getHostAddress();
  32. // } catch (UnknownHostException e) {
  33. // throw new RuntimeException(e);
  34. // }
  35. // }
  36. //
  37. // // 拼接 `mall` 服务的访问地址(格式:http://IP:端口)
  38. // String mallServiceUrl = "http://" + localIp + ":" + mallPort;
  39. // 1. 定义第一个请求头:Custom-Header-1
  40. SecurityScheme header1 = new SecurityScheme()
  41. .type(SecurityScheme.Type.APIKEY)
  42. .name("accesstoken") // 第一个请求头名称
  43. .in(SecurityScheme.In.HEADER);
  44. // 2. 定义第二个请求头:Custom-Header-2
  45. SecurityScheme header2 = new SecurityScheme()
  46. .type(SecurityScheme.Type.APIKEY)
  47. .name("token") // 第二个请求头名称
  48. .in(SecurityScheme.In.HEADER);
  49. SecurityScheme header3 = new SecurityScheme()
  50. .type(SecurityScheme.Type.APIKEY)
  51. .name("Accept-Language") // 第二个请求头名称
  52. .in(SecurityScheme.In.HEADER);
  53. // 3. 注册两个安全方案到组件
  54. Components components = new Components()
  55. .addSecuritySchemes("Header1Security", header1) // 第一个方案标识
  56. .addSecuritySchemes("Header2Security", header2) // 第二个方案标识
  57. .addSecuritySchemes("Header3Security", header3); // 第二个方案标识
  58. // 4. 定义安全要求,同时应用两个请求头
  59. List<SecurityRequirement> securityRequirements = new ArrayList<>();
  60. securityRequirements.add(new SecurityRequirement().addList("Header1Security"));
  61. securityRequirements.add(new SecurityRequirement().addList("Header2Security"));
  62. securityRequirements.add(new SecurityRequirement().addList("Header3Security"));
  63. List<ServiceInstance> gateway = discoveryClient.getInstances("backstage");
  64. String gatewayUrl = "http://192.168.0.112:8401/mall";
  65. if(!CollectionUtils.isEmpty(gateway)){
  66. ServiceInstance serviceInstance = gateway.get(0);
  67. String serviceId = serviceInstance.getServiceId();
  68. String host = serviceInstance.getHost();
  69. int port = serviceInstance.getPort();
  70. gatewayUrl = "http://"+host+":"+port+"/mall";
  71. }
  72. return new OpenAPI()
  73. .openapi("3.0.1")
  74. .info(new io.swagger.v3.oas.models.info.Info()
  75. .title(serviceName + " API")
  76. .version("1.0")
  77. .description("Documentation for " + serviceName))
  78. .servers(Collections.singletonList(
  79. new Server().url(gatewayUrl)
  80. )).components(components) // 注册组件
  81. .security(securityRequirements); // 全局应用安全要求
  82. }
  83. }