Spring Cloud Gateway 의 필터는 요청(Request)와 응답(Response)을 처리하는 과정에서 다양한 작업을 수행할 수 있게 해주는 구성 요소.
필터는 전처리와 후처리 작업을 통해 API Gateway의 기능을 확장하고 맞춤형 동작을 할 수 있도록 돕는다.
기존에 작성한 application.yml
의 라우팅 부분을 주석 처리하고 Filter class인 FilterConfig.class
를 이용하여 라우팅해 보겠습니다.
기존의 application.yml
Routing 부분 주석 처리
spring:
application:
name: api-gateway-service
# cloud:
# gateway:
# routes:
# - id: first-service
# uri: http://localhost:8081/
# predicates:
# - Path=/first-service/**
# - id: second-service
# uri: http://localhost:8082/
# predicates:
# - Path=/second-service/**
first-service
, second-service
로 라우팅 하는 부분을 주석 처리FilterConfig.class
를 이용하여 라우팅 설정
@Configuration
public class FilterConfig {
@Bean
public RouteLocator routeLocator(RouteLocatorBuilder routeLocatorBuilder) {
return routeLocatorBuilder.routes()
.route(predicateSpec -> predicateSpec.path("/first-service/**")
.filters(gatewayFilterSpec -> gatewayFilterSpec
.addRequestHeader("first-request", "first-request-header")
.addResponseHeader("first-response", "first-response-header"))
.uri("http://localhost:8081"))
.route(predicateSpec -> predicateSpec.path("/second-service/**")
.filters(gatewayFilterSpec -> gatewayFilterSpec
.addRequestHeader("second-request", "second-request-header")
.addResponseHeader("second-response", "second-response-header"))
.uri("http://localhost:8082"))
.build();
}
}
Request
, Response
header에 filter를 추가Request
, Response
가 Filter를 거쳐갈 때 위와 같은 Header
가 추가된다.Service Project
에 API를 추가하여 Routing
및 Header
가 적절하게 추가 되었는지 확인
API 추가 (***ServiceController
)
@GetMapping("/message")
public String message(@RequestHeader("first-request") String header) {
log.info(header);
return "Hello World in First Service";
}
@RequestHeader
를 추가하여 Header를 전달 받고 Log
로 출력Filter 수행 확인
http://localhost:8000/first-service/message 로 요청을 보내어 확인해 보자
First Service Project에서 Request Header 로그 확인
INFO w.d.firstservice.FirstServiceController : first-request-header
Request Header
에 추가한 Header 를 확인해 볼 수 있다.
Web에서 Response Header 확인
요청에 대한 응답에는 Response Header
를 확인
First-Response
Header를 확인할 수 있다.Before
application.yml
의 주석 처리한 부분 원복FilterConfig
의 @Configuration
, @Bean
을 주석처리하여 Spring의 Bean 등록 X 처리application.yml
에 Filter 정보를 추가하여 Header를 추가할 수 있다.
server:
port: 8000
eureka:
client:
register-with-eureka: false
fetch-registry: false
service-url:
defaultZone: http://localhost:8761/eureka
spring:
application:
name: api-gateway-service
cloud:
gateway:
routes:
- id: first-service
uri: http://localhost:8081/
predicates:
- Path=/first-service/**
filters:
- AddRequestHeader=first-request, first-request-header2
- AddResponseHeader=first-response, first-response-header2
- id: second-service
uri: http://localhost:8082/
predicates:
- Path=/second-service/**
filters:
- AddRequestHeader=second-request, second-request-header2
- AddResponseHeader=second-response, second-response-header2
filters
에 Request Header
, Response Header
를 추가