美文网首页
spring-cloud-starter-gateway集成sw

spring-cloud-starter-gateway集成sw

作者: 勤劳的杯子 | 来源:发表于2023-12-15 10:50 被阅读0次

    本地环境代码

    <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.2.5.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
    

    引入swagger(注意所有子模块包括gateway都要引入此依赖)

    <!-- 可以在parent中编写此配置,子项目直接引用依赖无需设置版本 -->
                <dependency>
                    <groupId>io.springfox</groupId>
                    <artifactId>springfox-swagger2</artifactId>
                    <version>3.0.0</version>
                </dependency>
    

    网关配置

    1. gateway依赖配置
    <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger-ui</artifactId>
                <version>3.0.0</version>
            </dependency>
    <!-- 使用parent的版本 -->
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger2</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springdoc</groupId>
                <artifactId>springdoc-openapi-webflux-ui</artifactId>
                <version>1.6.14</version>
            </dependency>
            <dependency>
                <groupId>com.github.xiaoymin</groupId>
                <artifactId>knife4j-openapi3-ui</artifactId>
                <version>4.0.0</version>
            </dependency>
            <dependency>
                <groupId>io.swagger.core.v3</groupId>
                <artifactId>swagger-annotations-jakarta</artifactId>
                <version>2.2.7</version>
            </dependency>
    
    1. 编写配置类 SwaggerUiWebFluxConfigurer
    @Configuration
    public class SwaggerUiWebFluxConfigurer implements WebFluxConfigurer {
    
        @Override
        public void addCorsMappings(CorsRegistry registry) {
            // 配置跨域
            registry.addMapping("/**").allowedOrigins("*").allowedMethods("GET", "POST", "OPTION", "DELETE").maxAge(3600);
        }
    
        @Override
        public void addResourceHandlers(ResourceHandlerRegistry registry) {
            // 重新映射路径
            registry.
                    addResourceHandler("/swagger-ui/**")
                    .addResourceLocations("classpath:/META-INF/resources/webjars/springfox-swagger-ui/")
                    .resourceChain(false);
    
            registry.addResourceHandler("/swagger-ui.html**")
                    .addResourceLocations("classpath:/META-INF/resources/");
    
            registry.addResourceHandler("/webjars/**")
                    .addResourceLocations("classpath:/META-INF/resources/webjars/").resourceChain(true);
        }
    }
    
    
    1. 重新设置访问路径 SwaggerHandler
    @RestController
    public class SwaggerHandler {
        @Autowired(required = false)
        private SecurityConfiguration securityConfiguration;
    
        @Autowired(required = false)
        private UiConfiguration uiConfiguration;
    
        private final SwaggerResourcesProvider swaggerResources;
    
    
        @Autowired
        public SwaggerHandler(SwaggerResourcesProvider swaggerResources) {
            this.swaggerResources = swaggerResources;
        }
    
    
        @GetMapping("/swagger-resources/configuration/security")
        public Mono<ResponseEntity<SecurityConfiguration>> securityConfiguration() {
            return Mono.just(new ResponseEntity<>(
                    Optional.ofNullable(securityConfiguration).orElse(SecurityConfigurationBuilder.builder().build()), HttpStatus.OK));
        }
    
        @GetMapping("/swagger-resources/configuration/ui")
        public Mono<ResponseEntity<UiConfiguration>> uiConfiguration() {
            return Mono.just(new ResponseEntity<>(
                    Optional.ofNullable(uiConfiguration).orElse(UiConfigurationBuilder.builder().build()), HttpStatus.OK));
        }
    
        @GetMapping("/swagger-resources")
        public Mono<ResponseEntity> swaggerResources() {
            return Mono.just((new ResponseEntity<>(swaggerResources.get(), HttpStatus.OK)));
        }
    }
    
    1. 启动类添加注解 @EnableSwagger2WebFlux
    @SpringBootApplication
    @EnableSwagger2WebFlux
    public class ImesGatewayApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(ImesGatewayApplication.class, args);
        }
    
    }
    
    

    5.配置引用的服务 在bootstrap.yamlapplication.yaml编写

    springdoc:
      swagger-ui:
        urls:
          - name: '你自己的服务名称1'
            url: 服务路径前缀/v2/api-docs
          - name: '你自己的服务名称2'
            url: 服务路径前缀/v2/api-docs
    

    其他服务配置

    1. pom.xml 引用
    <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger2</artifactId>
            </dependency>
    
    1. 配置类(我的服务比较特殊需要实现过滤器转发请求后才能访问)

    注入 Docket 的bean是必须的

    @Configuration
    public class SwaggerFilter implements Filter {
        @Bean
        public Docket api() {
            return new Docket(DocumentationType.SWAGGER_2)
                    .select()
                    .apis(RequestHandlerSelectors.basePackage("填写你要扫描的包名"))
                    .paths(PathSelectors.any())
                    .build()
                    .globalRequestParameters(getGlobalRequestParameters());
        }
        //生成全局通用参数
        private List<RequestParameter> getGlobalRequestParameters() {
            List<RequestParameter> parameters = new ArrayList<>();
            parameters.add(new RequestParameterBuilder()
                    .name("Authorization")
                    .description("认证")
                    .in(ParameterType.HEADER)
                    .query(q -> q.model(m -> m.scalarModel(ScalarType.STRING))
                            .defaultValue("Bearer "))
                    .required(true)
                    .build());
            return parameters;
        }
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
            Filter.super.init(filterConfig);
        }
    
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
            HttpServletRequest httpRequest = (HttpServletRequest) request;
            if (httpRequest.getRequestURI().equals("/device/v2/api-docs")) {
                RequestDispatcher requestDispatcher = request.getRequestDispatcher("/v2/api-docs");
                requestDispatcher.forward(request,response);
            }else {
                chain.doFilter(request,response);
            }
        }
    
        @Override
        public void destroy() {
            Filter.super.destroy();
        }
    }
    
    1. 启动类设置 @EnableSwagger2
    @SpringBootApplication
    @EnableSwagger2
    public class ImesDeviceApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(ImesDeviceApplication.class, args);
        }
    
    }
    
    

    注意:如果有配置安全认证相关的代码需要放行 "/v2/api-docs"路径

    完成!访问 http://你的ip+端口/doc.html 即可进入

    相关文章

      网友评论

          本文标题:spring-cloud-starter-gateway集成sw

          本文链接:https://www.haomeiwen.com/subject/nzawgdtx.html