WebClient를 이용하다 보면, API_KEY나 serviceKey 개념을 사용하실 경우도 있을 텐데요
이 때, 주의하셔야 할 점이 있습니다. (물론 정..상 적인 api 명세라면 문제가 없을 겁니다)
올바른 API KEY를 전달했음에도 불구하고 WebClient 자체적으로 인코딩을 적용하기 때문에
개발자가 넣은 API KEY가 변형되어 전달될 수 있기 때문입니다.
공감하시는 분들은 인증 Key를 잘 입력했는데도 불구하고, 올바르지 않은 키가 입력되었다는 경험을 하고 계실 겁니다.
직접 로그를 찍어보시면, 전달했던 API KEY와 실제로 적용되고 있는 API KEY가 다르다는 것을 요청 url을 통해 확인할 수 있습니다.
이런식으로 말이죠!
WebClient의 기본적인 인코딩 방식은 UriComponentsBuilder#encode() 옵션을 통해 예약 문자들을 치환한다고 합니다.
사실 문제될 것은 없지만, 지금처럼 url query param으로 api key가 전달될 경우 문제가 발생할 수 있습니다.
보통은 auth header에 인증키가 전달되기에 이럴 일이 잘 없긴 하죠.. ㅎㅎ
저는 공공데이터를 사용하고 있는데, 공공데이터 api는 serviceKey가 모두 query param으로 전달된다는 치명적인 문제가 있습니다..
제가 명세를 바꿀 수도 없으니..ㅜㅜ
여튼 백엔드에서 정해놓은 api 명세를 변경할 수가 없다면, 기본 인코딩을 제거해주는 추가적인 과정이 필요합니다.
val webClient: WebClient = WebClient.builder()
.uriBuilderFactory(
DefaultUriBuilderFactory(publicDataApiConfig.baseUrl).apply {
encodingMode = EncodingMode.VALUES_ONLY
}
)
.build()
기존에 사용하시던 WebClient를 이렇게 사용해주시면 됩니다.
참고
'[SpringBoot]' 카테고리의 다른 글
Exceeded limit on max bytes to buffer: 해결하기 (0) | 2024.11.05 |
---|---|
Spring Data JPA 에는 ON DUPLICATE KEY UPDATE 가 없다 ! 어떻게 해야할까 ! (0) | 2024.08.26 |
내가 두고두고 쓰는 Docker 설정들 총 정리 (EC2 & NginX & SpringBoot & MySQL) (0) | 2024.04.10 |
게시글 읽어올 때, 좋아요 수랑 댓글 수를 어떻게 처리할 것인가? (0) | 2024.04.10 |
[Kotlin + Spring] 내가 QueryDSL을 도입하게 된 이유 (0) | 2024.04.08 |