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); 
 | 
        }; 
 | 
    } 
 | 
  
 | 
} 
 |