결론부터 말하자면 Cookies에 속았다. 다시 생각해보면 내가 프론트엔드 쪽 지식이 너무 없었다.
상황 설명
프로젝트에서 JWT를 사용한 인증을 구현했다.
로그인시 서버는 클라이언트에게 Access Token과 Refresh Token을 반환한다.
Access Token이 만료되면 클라이언트는 Refresh Token을 쿠키에 담아 토큰 재발급 API를 요청한다.
서버는 해당 Refresh Token이 유효하면 Access Token과 Refresh Token을 재발급해준다.
문제 발생
로그인시 클라이언트에게 Refresh Token을 반환할때 쿠키에 담아서 보낸다.
그러면 위의 캡쳐화면 속 Cookies에 알아서 세팅이 된다.
그래서 클라이언트가 서버에서 요청할 때도 Cookies안에 쿠키가 있으면 정상적으로 작동할 거라고 생각했다.
그러나!
Required String parameter '인자' is not present 오류 가 발생하였다.
확인해보니 애초에 Cookie를 읽어오지를 못하는 거였다.
프론트엔드 개발 팀원이 따로 있어서 프론트엔드를 잘 모르는(백엔드 개발 담당인) 나는 Postman으로 테스트를 하다가 예상치 못한 오류에 당황했다.
해결
Cookies에는 제대로 쿠키가 반환되고 있었기에 의심하지 않았다.
그러나.. Postman에서 API를 호출할때 @Cookievalue를 받으려면 Headers에 쿠키를 따로 설정해줘야한다.
Key에는 Cookie를, Value에는 쿠키의 값을 입력하면 된다.
아래 캡쳐화면처럼 설정하면 된다.
name이 refresh-token인 쿠키를 받으려면 아래와 같이 작성하면 된다.
@PostMapping("/")
public ResponseEntity<?> reissue(@CookieValue(name = "refresh-token") String requestRefreshToken)
혹시나 나처럼 헤매는 사람이 없기를 바라며........
'💻dev > 🔧오류와 해결' 카테고리의 다른 글
[해결] AWS EC2 퍼블릭 IP 바뀜 -> 고정 IP 사용하기 (0) | 2023.07.04 |
---|---|
[해결] EC2 서버가 자꾸 죽을 때.... SWAP 메모리 설정을 하자!(AWS EC2 프리티어 메모리 부족 해결방법) (0) | 2023.06.23 |
Java | java.lang.ClassNotFoundException: javax.xml.bind.JAXBException 오류 해결하기 (0) | 2023.05.03 |
[해결] IntelliJ 빌드 후 finished with non-zero exit value 1 오류 해결하기 (0) | 2023.04.19 |
Selenium | 셀레니움 find_element_by_xxx 안되는 이유 (0) | 2023.03.16 |