openfeign을 사용할 때 header에 값을 추가하여 전달하는 방법이다.
1. Header의 값이 1개
header가 1개일 경우는 아래와 같이 headers에 추가하려는 name=value 형식으로 넣으면 된다.
@FeignClient(name = "userClient", url = "http://localhost:8080")
public interface UserClient {
@RequestMapping(value = "/users/1", method = RequestMethod.GET, headers = "header1=value1")
User find();
}
실행 결과
[nio-8080-exec-1] com.example.feign.UserClient : [UserClient#find] header1: value1
2. header의 값이 여러개
header의 값이 여러개일 경우는 아래와 같이 headers에 추가하려는 값을 배열로 넣으면 된다.
@FeignClient(name = "userClient", url = "http://localhost:8080")
public interface UserClient {
@RequestMapping(value = "/users/1", method = RequestMethod.GET, headers = {"header1=value1", "header2=value2"})
User find();
}
실행 결과
[nio-8080-exec-1] com.example.feign.UserClient : [UserClient#find] header1: value1
[nio-8080-exec-1] com.example.feign.UserClient : [UserClient#find] header2: value2
3. 모든 feign에 공통적으로 추가
일반적으로 token이나 인증정보는 모든 feign에 공통적으로 넣어야 하는 경우가 많다.
이런 경우를 대비해서 Feign은 RequestInterceptor
인터페이스를 제공한다. 여기에 요청 헤더를 추가할 수 있다.
모든 요청에 헤더가 포함되어야 할 경우에 사용한다.
@RequiredArgsConstructor
public class AuthRequestInterceptor implements RequestInterceptor {
private final TokenService tokenService;
@Override
public void apply(RequestTemplate template) {
template.header("Authorization", tokenService.getToken());
}
}
그리고 위에서 생성한 Interceptor를 Bean으로 등록한다.
@Configuration
public class FeignConfig {
@Bean
public AuthRequestInterceptor feignInterceptor() {
return new AuthRequestInterceptor();
}
}
그리고 나서 feign 요청 시 configuration에 추가하여 호출한다.
@FeignClient(name = "userClient", url = "http://localhost:8080", configuration = FeignConfig.class)
public interface UserClient {
@RequestMapping(value = "/users/1", method = RequestMethod.GET)
User find();
}
실행결과
[nio-8080-exec-1] com.example.feign.UserClient : [UserClient#find] Authorization: afaf3afafadfaf3fa2fafjjadsfozfj
모든 요청에 Authorization 헤더가 포함되어 넘어가는 것을 확인할 수 있다.
참고
feign log를 활성화하려면 아래와 같이 설정을 추가하면 된다.
feign:
client:
config:
default:
loggerLevel: full
logging:
level:
com.example: debug
- feign.client.config.default.loggerLevel: full
- logging.level.<<feign의 package 경로>>: debug
- 예: logging.level.com.example.user.feign: debug
반응형