| package com.doumee.config.swagger; | 
|   | 
| import org.apache.commons.lang.StringUtils; | 
| import org.springframework.beans.factory.annotation.Autowired; | 
| import org.springframework.cloud.gateway.filter.GatewayFilter; | 
| import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory; | 
| import org.springframework.http.HttpStatus; | 
| import org.springframework.http.ResponseEntity; | 
| import org.springframework.http.server.reactive.ServerHttpRequest; | 
| import org.springframework.stereotype.Component; | 
| import org.springframework.web.bind.annotation.GetMapping; | 
| import org.springframework.web.bind.annotation.RequestMapping; | 
| import org.springframework.web.bind.annotation.RestController; | 
| import org.springframework.web.server.ServerWebExchange; | 
| import reactor.core.publisher.Mono; | 
| import springfox.documentation.swagger.web.*; | 
|   | 
| import java.util.Optional; | 
|   | 
| @Component | 
| public class SwaggerHeaderFilter extends AbstractGatewayFilterFactory { | 
|     private static final String HEADER_NAME = "X-Forwarded-Prefix"; | 
|   | 
|     private static final String URI = "/v2/api-docs"; | 
|   | 
|     @Override | 
|     public GatewayFilter apply(Object config) { | 
|         return (exchange, chain) -> { | 
|             ServerHttpRequest request = exchange.getRequest(); | 
|             String path = request.getURI().getPath(); | 
|             if (!StringUtils.endsWithIgnoreCase(path, URI)) { | 
|                 return chain.filter(exchange); | 
|             } | 
|             String basePath = path.substring(0, path.lastIndexOf(URI)); | 
|             ServerHttpRequest newRequest = request.mutate().header(HEADER_NAME, basePath).build(); | 
|             ServerWebExchange newExchange = exchange.mutate().request(newRequest).build(); | 
|             return chain.filter(newExchange); | 
|         }; | 
|     } | 
|   | 
| } |