본문 바로가기

Java

[Java] exception 예외처리 한 메세지를 프론트(클라이언트)로 전달해주고싶을 때 (@ControllerAdvice)

사골곰탕처럼 우려먹는 프로젝트....

하지만 프로젝트 진행하면서 너무나도 새로운 것들을 해보았기 때문에 다 기록할테다 후후후

 

프로젝트에서 jwt 사용해서 사용자 인증했음

로그인 시 백에서 프론트로 토큰 발급해주고 프론트에서는 해당 토큰을 로컬스토리지에 저장시키고,

사용자가 예를들어 글을 작성할 경우에 프론트에서 백한테 다시 토큰을 전달해주어서 백에서는 토큰으로 사용자가 맞는지 유효성과 만료일자를 확인하였다.

 

토큰 만료일자를 하루로 지정했는데, 귀찮아서 pc재부팅 없이 잠금모드로 사용했는데 로그인한 상태로 다음 날에도 테스트를 진행하다보니 토큰이 만료된 상태되었다. 하지만 서버 로그에는 에러가 찍히지만 프론트(클라이언트) 측에서는 만료 여부를 모르는 상황이였다..!! ㅇ_ㅇ

그래서 exception처리 한 메세지를 프론트(클라이언트) 측에 전달하는 방법을 검색하게 되었다..!!

 

서론이 정말 길다 후후..

 

* 내가 별도로 설정한 예외처리 (토큰 만료 시 발생)

public class TokenExpiredException extends RuntimeException {

	public TokenExpiredException(String message) {
		super(message);
	}
}

 

* 전역으로 예외처리

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;

@ControllerAdvice
public class GlobalExceptionHandler {

	@ExceptionHandler(TokenExpiredException.class)
	public ResponseEntity<String> handleTokenExpiredException(TokenExpiredException ex) {
        return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(ex.getMessage());
    }
}

 

* 내가 별도로 설정한 예외처리 (토큰 만료 시 발생) 적용

if (!isValidToken) {
	throw new TokenExpiredException("Token expired");
}

 

토큰 만료되면 내가 설정한 메세지 (Token expired)가 정상적으로 프론트(클라이언트)한테 전달되고 있는 것을 확인할 수 있다!!!