기존의 작성한 yml 설정을 모두 주석처리를 한다.
그리고 config 패키지를 만들어 FilterConfig java 파일을 생성한 뒤
@Configuration //해당 어노테이션을 통해 spring이 시작될때 context에 자동으로 등록되도록 한다.
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://127.0.0.1:8001")) //기존 yml에서 1번 서비스 설정과 동일
.route(r-> r.path("/second-service/**")
.filters(f-> f.addRequestHeader("second-request","second-request-header")
.addResponseHeader("second-response","second-response-header"))
.uri("http://127.0.0.1:8002")) //기존 yml에서 2번 서비스 설정과 동일
.build();
}
}
다음과 같이 설정해주면 기존의 yml 설정과 동일한 설정에 filter를 주어 header에 해당 값들을 넣어줄 수 있다.
@GetMapping("/message")
public String message(@RequestHeader("first-request") String header){
log.info("header = {}",header);
return "header = "+header;
}
@GetMapping("/message")
public String message(@RequestHeader("second-request") String header){
log.info("header = {}",header);
return "header = "+header;
}
기존의 코드에 다음과 같이 header값을 출력해보기 위해 log과 반환하는 문자열에 추가해주자.
두개의 서비스를 요청했을 때 log에 각 헤더의 정보가 전달된것을 확인할 수 있다.
각 client쪽의 response의 header에도 우리가 작성한 header 값이 들어간 것도 확인할 수 있다.
기존의 FilterConfig파일은 삭제하거나 어노테이션만 주석 처리 한 뒤 다시 yml로 똑같은 작업을 실행하도록 처리해보자.
server:
port: 8000
eureka: #eureka 세팅은 현재 사용 안함
client:
fetch-registry: false
register-with-eureka: false
service-url:
defaultZone: http://127.0.0.1:8761/eureka
spring:
application: #gateway service 이름름 name: apigateway-service
cloud:
gateway: #gateway 설정
routes:
- id: first-service #gateway로 연결될 서비스 이름
uri: http://127.0.0.1:8001/ #gateway로 연결될 서비스 uri
predicates: #gateway로 연결될 서비스의 url 매핑
- Path=/first-service/**
filters:
- AddRequestHeader=first-request, first-request-header2
- AddResponseHeader=first-response, first-response-header2
- id: second-service
uri: http://127.0.0.1:8002/
predicates:
- Path=/second-service/**
filters:
- AddRequestHeader=second-request, second-request-header2
- AddResponseHeader=second-response, second-response-header2
서버 실행을 해보자
포스트맨을 통해서 요청하면 우리가 filters에 설정한 내용대로 출력되는 것을 확인할 수 있다.