2024. 11. 21. 08:25ㆍSpring/JPA-Plus 과제
📁️ 필수 과제 참고
- 과제 최종 Commit 내역
🛠️ 트러블슈팅 - Spring Security 적용후에 발생한 api 403에러 문제
1. 개요
- Spring Security을 적용할때 발생한 API 403에러(코드와 메시지도없음)에 대한 트러블 슈팅을 작성해보겠습니다.
2. 배경
- gradle에서 의존성 추가 및 설정파일을 만들고 WebSecurityConfig 파일을 생성했습니다.
- Spring Security에서 사용할 커스텀필터 파일을 생성했습니다.
3. 발단
- 로그인, 회원가입을 진행하기 위해 해당되는 경로의 API들은 접근허용하도록 설정했습니다.
4. 전개
- 로그인, 회원가입을 제외한 다른 API들은 모두 403에러가 나타나는 현상을 확인했습니다.
- 원인을 검색해보니 error가 발생하는 경로도 Spring Security에서 접근을 제한하기 때문이었습니다.
5. 위기
- /auth 로그인 및 회원가입 API는 접근허용 했던것과 동일하게 error 경로도 접근을 허용하도록 했습니다.
※ 주석에서도 설명이 되어있듯이 권장하지는 않는 방법이고, 구현체를 세팅해서 에러를 잡는형태가 좋다고 하니 추후에 추가해보겠습니다.
- 에러는 잡아내지만 Spring Security와 연동되는 커스텀필터파일에서 jwt토큰관련된 예외처리를 다 진행줘야하는것을 깨달았습니다.
6. 절정
- 일단 Spring Security를 활용해서 핵심적으로 변경하고 싶었던 부분은 회원정보가 필요한 API에서 커스텀어노테이션을 활용해서 회원정보를 가져오는데 그 부분을 Spring Security에서 제공하는 인터페이스로 불러오는 형태로 바꾸는게 주목적이었습니다. 그래서 try문 시작할때 JwtUtil에서 회원고유번호(userId)를 따로 추출하고 있습니다.
- 해당 커스텀필터 파일에서 jwt토큰 관련된 예외를 다 처리하여 문제없이 에러발생하는 경우에도 정상적으로 에러코드와 메시지를 출력하는 형태로 잘 변경되었습니다.
7. 결말
1) gradle에 의존성 추가
2) config에 WebSecurityConfig 파일 세팅, WebSecurityConfig과 연동될 JwtRequestFilter 세팅
3) WebSecurityConfig파일에서 로그인,회원가입 관련된 경로는 접근 허용
4) 로그인, 회원가입 제외한 모든 API에서 일괄적으로 403에러(코드와 메시지도 비어있는)를 반환하는 현상 확인
5) 해당 원인은 Spring Security에서 error에 대한 페이지도 접근 제한이 있기 때문으로 파악
6) 로그인 회원가입과 동일하게 error 경로 페이지를 접근 허용하면서 해결
※ 권장하지는 않는 방법 (불필요하게 서버에서 경로를 다시 찾아야하는) spring security 구현체를 세팅해서 에러를 잡는형태가 좋다고함.
7) 최종적으로 JwtRequestFilter에서 토큰 관련된 예외처리까지 다 하는 형태로 변경하고 다른 API들도 정상적으로 에러와 API정상호출되는것 확인
'Spring > JPA-Plus 과제' 카테고리의 다른 글
[17] Spring - QueryDSL 트러블슈팅 (11) | 2024.11.19 |
---|---|
[16] Spring - JPA-Plus 과제 필수레벨_2 (2) | 2024.11.19 |
[15] Spring - JPA-Plus 과제 필수레벨_1 (0) | 2024.11.18 |