꾸물꾸물 졔의 개발공부
[Springboot] JWT(5)_ WebClient 통신 (서버 투 서버)에서 JWT 필터 예외 ( 유효 기간 만료 / 올바르지 않은 값 ) 처리하기 본문
SPRING
[Springboot] JWT(5)_ WebClient 통신 (서버 투 서버)에서 JWT 필터 예외 ( 유효 기간 만료 / 올바르지 않은 값 ) 처리하기
체제 2022. 8. 23. 23:29- 내가 한 프로젝트 구조는 , 클라이언트의 요청이 들어오면 서비스 서버가 일차적으로 요청을 받고, 회원의 개인정보와 관련없는 단순 비즈니스 로직은 서비스 서버단에서 처리 .
- 그 외의 개인정보와 관련된 USER 데이터 는 인증서버에서 처리하도록 하였다.
JWT 필터는 인증서버에 등록해놓았다.
- WebClient 로 서버 간 통신을 하고 있는데, 필터에서 토큰 유효성에 대한 예외가 발생하면
어떻게 처리하여 서비스 서버로 넘기고 클라이언트에게 응답 할 수 있을까 ?
▶ 필터에서 예외를 발생시키면, AuthenticationEntryPoint에서 catch 하고, 또 예외를 발생시켜 webClient 를 전송한 곳 ( 서비스 서버) 에서 catch 하도록 하였다 .
if(exception.equals(ErrorCode.EXPIRED_TOKEN.getErrorCode())) {
errorCode = ErrorCode.EXPIRED_TOKEN;
setResponse(response, errorCode);
return;
}if(exception.equals(ErrorCode.INVALID_TOKEN.getErrorCode())) {
errorCode = ErrorCode.INVALID_TOKEN;
setResponse(response,errorCode);
return;
}
: AuthenticationEntryPoint 를 구현한 CustomAuthenticationEntryPoint.java 에서 각 예외에 대한 에러코드를 응답
서비스 서버에서 WebClient 로 인증 서버 통신
TokenErrorResponse er = new TokenErrorResponse();
try {
parentInfo= webClient.get().uri("/authentication/parentinfo/"+parent_id)
.header("Authorization", header)
.retrieve().bodyToMono(ParentResponse.class).block();
//토큰사용자가 틀림
if(parentInfo.getId().equals("wrong-token")) {
er.setStatusCode(1000);
er.setMessage("토큰 사용자 오류");
data.put("errorInfo", er);
return data;
}
}catch(UnknownHttpStatusCodeException e) {
int status = e.getRawStatusCode();
//유효기간 만료 된 토큰
if(status == 1001) {
er.setStatusCode(1001);
er.setMessage("토큰기한이 만료, 재발급 요청 ");
}
//옳지 않은 토큰
if(status == 1002) {
er.setStatusCode(1002);
er.setMessage("틀린 토큰 or 올바르지 않은 형식");
}
}catch(WebClientResponseException e) {
int status = e.getRawStatusCode();
er.setStatusCode(status);
er.setMessage("토큰 값 없음 or 서버 오류");
}
- WebClient 를 이용한 서버간 통신에서 요청헤더에서 토큰 값을 얻어왔고, 인증서버로 요청을 전송했다.
[ 토큰은 존재하나, 올바르지 않은 형태이거나 유효기간 만료 ]
- UnknownHttpStatusCodeException 예외를 잡았고, 응답값이 정의되어있지 않은 값 (1001 / 1002 ) 이기 때문.
- - 1001 : 유효기간 만료 토큰 , 응답 메세지와 응답 코드 객체 생성
- - 1002 : 유효하지 않은 토큰 , 응답 메세지와 응답 코드 객체 생성
[ 헤더에 토큰이 존재하지 않거나 ,서버 통신 오류 ]
- WebClientResponseException 예외 잡아서 응답 객체 생성
TokenErrorResponse.java - 토큰 에러 발생 시, 응답값 담아서 보낼 객체
@Getter
@Setter
public class TokenErrorResponse {
//에러코드 : 1001(유효기간 지난 토큰) / 1002 (옳지 않은 토큰)
int statusCode;
//에러메세지
String message;
}
'SPRING' 카테고리의 다른 글
[Spring] 스프링 컨테이너란 (0) | 2023.03.09 |
---|---|
[Springboot] JWT(6) _ 로그아웃 구현/AccessToken 블랙리스트 + RefreshToken 삭제 + Redis (0) | 2022.08.24 |
[Springboot] JWT(4)_ JWT 필터를 통해 토큰 만료시간 / 토큰 유효성 예외 발생시키기 (0) | 2022.08.23 |
[Springboot] JWT(3)_filter 적용 및 토큰 검사/인증 부여 (0) | 2022.08.23 |
[Springboot] JWT(2)_refresh 토큰 redis 저장 (0) | 2022.08.16 |