쌩로그

Header에 JWT가 잘 들어갔지만...(NPE 해결, feat. 오타를 주의하자) 본문

TroubleShooting & 고민/BE

Header에 JWT가 잘 들어갔지만...(NPE 해결, feat. 오타를 주의하자)

.쌩수. 2023. 6. 26. 16:04
반응형

목차.

  1. 포스팅 개요
  2. 본론
      2-1. log.info 바름
      2-2. 오타 발견
      2-3. 문제해결
  3. 요약
      3-1. 번외 - 디버깅의 유래

1. 포스팅 개요

저번 포스팅에서 한칸 띄어쓰기가 중요하다고 하면서 오타를 잠시 언급했던 내용이 있다. 그와 관련된 내용이다.

JWT를 잘 발급받고, 요청 Header에 JWT를 잘 넣었지만, 사용자정보를 읽어올 수 없어 NPE(NullPointerException)가 발생한 문제를 해결한 포스팅인데,

결론은 사실....오타다..
오타 하나로 1-2일을 삽질했고, 이를 발견하고 허무해서 사실 열 받아서 쓰는 포스팅이다..
그래도 잡고나니 기분은 좋았다..🙂

2. 본론

2-1. log.info 바름

소셜 로그인을 하고, JWT를 발급받아 Headr에 Authorization의 값으로 잘 넣었다.. 분명히!!
그런데 컨트롤러 메서드에서 Principal 정보를 받을 때, 계속 NullPointerException이 발생했다.

그래서 log.info를 컨트롤러 메서드 영역에 넣고, 발라봤지만,,,

log에서조차 NPE가 떴다.
생각해보면 당연한 결과였다.
log에서도 메서드를 호출한 값이 log로 나오는 방식인데, 당연히 Principal(인증된 사용자 객체)자체가 null이라, NPE가 뜰 수 밖에 없던 결과였다.

log로도 확인할 수 없어서 SpringSecurity 필터들을 자세히 살펴보고, ChatGPT한테도 물어보고, Filter들도 어떤 필터를 거쳐가는지 확인했었다..

2-2. 오타 발견

그런데,,보다보니 이상한 게 눈에 하나 띄었다.
Bearer jwtsdlfhsdoifhsdf
JWT는 위와 같은 방식으로 오는데, 이 때 Bearer 이 부분은 String 클래스의 replace() 메서드를 통해서 ""(공백)으로 치환하게 되어있다.

request.getHeader("Authorization").replace("Bearer ","");
요청의 헤더 중, "Authorization"에 해당하는 값의 "Bearer " 부분을 ""으로 치환

코드가 이렇다.

그런데,
"Bearer " << 이렇게 되어있어야 할 부분이
"Bearer ," << 이렇게 되어있었다...

하..

후...
위와 같이 오타(=버그)를 발견했으니 수정해줬다.

이 때 엥간히도 화났었나보다.. 사실 시간 지나고 스샷만 캡쳐해놓고 이제야 포스팅하는건데..ㅋㅋㅋㅋㅋㅋㅋㅋ

2-3. 문제해결

수정을 하고난 후 발라놨던 log.info가 잘 동작한다.

그리고 NullPoinerException이 나오지 않게 되었다.
(참고로 아래 문제는 다른 문제라서 괜찮다. 결국 오타를 잡아서 JWT와 관련된 NPE 문제는 해결했다.)

사실 오타를 발견하고도 정말 이 문제가 맞을까?? 라는 두려움과 설레임 속에 서버를 실행시켰었다.
근데 정말 이 문제가 맞아서 다행이었다...후..

3. 요약

JWT를 잘 Header에 잘 담아서 보냈지만, 오류로 인해 발생한 NPE를 해결한 포스팅이었다.

3-1. 번외 - 디버깅의 유래

이번 건 ㄹㅇ 디버깅이었다.

끝.

내가 성장하는 것이 다른 사람에게 좋은 영향을 줄 수 있다.

그래서 나는 잘 되야만 한다.

나는 진짜 ㄹㅇ 조만간 잘 될 사람이다.

어차피 잘 될 것이고, 지금도 잘 된 사람이다..

요즘 폭풍 성장 중이다.

어쨋든간 나는 어잘될사다.

728x90
Comments