spring / / 2023. 10. 17. 20:20

openfeign에서 header에 값 추가하는 방법

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
반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유