본문 바로가기
스프링 스터디 (인프런)/API GATEWAY

Spring Cloud Gateway - Filter 적용2

by 백엔드 개발자 2023. 8. 12.

 

yml 파일에서 작업하지 않고 분기처리 진행 연습

Config 클래스를 통해서 분기처리 전후로 필터링을 진행한다. 

 

 

 

@Configuration
public class FilterConfig {
    @Bean
    public RouteLocator gatewayRoutes(RouteLocatorBuilder builder) {
        return builder.routes()
                .route(r -> r.path("/first-service/**")
                        .filters(f -> f.addRequestHeader("first-request","first-request-header")
                                .addResponseHeader("first-response","first-response-header"))
                        .uri("http://localhost:8081"))//r(예시)이라는 값이 전달되면 path를 확인하고 filter를 동작해서 uri로 이동시키겠다는 의미

                .route(r -> r.path("/second-service/**")
                        .filters(f -> f.addRequestHeader("second-request","second-request-header")
                                .addResponseHeader("second_response","second_response-header"))
                        .uri("http://localhost:8082"))
                .build();
    }
}

RouteLocator를 이용해서 라우팅을 등록가능.

위코드 의미는

path가 first-service/**로 들어오는 값들이면 uri(localhost:8081)로 이동시키는데,

이때 RequestHeader에는 first-request값을, ResponseHeader에는 first-response라는 파라미터를 추가한다.

 

 

 

 

 

first-service  -  FirstServiceController.java 

@GetMapping("/message")
public String message(@RequestHeader("first-request") String header) {
    log.info(header);
    return "Hello World in First Service";
}

second-service  -  SecondServiceController.java

@GetMapping("/message")
public String message(@RequestHeader("second-request") String header) {
    log.info(header);
    return " Hello world in Second Service.";
}

apigateway에서 필터에 헤더값을 넣어줬으므로, 이를 확인하기 위해서 header라는 변수로 받은 후, 출력해본다.

 

 

 

 

출력 결과

로그 상에서도 헤더를 제대로 출력하는 것을 확인할 수 있다.

 

 

 

 

 

 

Response-Header 확인

도구더보기 -> 개발자도구 ->network -> 새로고침 진행시 response-Header도 확인 가능