| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
- container
- 동시성
- db
- java
- 도커
- Java IO
- 자바
- 컨테이너
- 자바 입출력 스트림
- Kubernetes
- 실전 자바 고급 1편
- 김영한
- 쓰레드
- 시작하세요 도커 & 쿠버네티스
- 쿠버네티스
- 인프런
- 데이터베이스
- mysql
- 스레드
- RDB
- SQL
- 도커 엔진
- Thread
- Docker
- 자료구조
- 람다
- 멀티 쓰레드
- 알고리즘
- 함수형 인터페이스
- lambda
- Today
- Total
쌩로그
Header에 JWT가 잘 들어갔지만...(NPE 해결, feat. 오타를 주의하자) 본문
목차.
- 포스팅 개요
- 본론
2-1. log.info 바름
2-2. 오타 발견
2-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. 번외 - 디버깅의 유래
- Debug의 어원의 유래는 초창기 컴퓨터에 나방이 들어가 고장을 일으킨 데에 있다
https://seobinggo.com/606
https://namu.wiki/w/%EB%94%94%EB%B2%84%EA%B7%B8
https://blog.naver.com/mdown/220157579733
이번 건 ㄹㅇ 디버깅이었다.
끝.
내가 성장하는 것이 다른 사람에게 좋은 영향을 줄 수 있다.
그래서 나는 잘 되야만 한다.
나는 진짜 ㄹㅇ 조만간 잘 될 사람이다.
어차피 잘 될 것이고, 지금도 잘 된 사람이다..
요즘 폭풍 성장 중이다.
어쨋든간 나는 어잘될사다.
'TroubleShooting & 고민 > BE' 카테고리의 다른 글
| AOP는 필요없었다...(feat. Spring Security는 진짜 좋은 프레임워크다.) (0) | 2023.07.09 |
|---|---|
| AOP로 AccessToken 검증(빡쳐서 만듬) (5) | 2023.07.05 |
| Spring Rest Docs Plug in 못 받는 문제..(feat.gradle 7) (0) | 2023.05.05 |
| 오라클이 설치가 원활하지 못할 때(오라클 설치 롤백) (0) | 2023.05.05 |
| H2 데이터베이스 연결 오류(인프런 - 김영한 JPA 기본편 강의 중) (0) | 2023.05.05 |