해결된 질문
작성
·
55
0
안녕하세요! 항상 강의 잘 듣고 있습니다!
그런데 강의를 듣다가 checkTokenForRefresh
을 해주는 메서드를 만드셨는데 제가 이해한것이 맞는지 궁금해서 질문드립니다!
이 메서드에서 만료가 되면 TokenExpiredException
이 일어나면 토큰이 만료되서 decode
을 하시는데 위에 메서드들 처럼 createToken
을 안하는 이유가 만료된 토큰의 정보 바탕으로 바로 똑같이 바로 만들어지는 건가요?
답변 2
1
안녕하세요 먼저 질문 주셔서 감사합니다. 제 강의가 상희님에게 많은 도움이 되셨으면 좋겠습니다.
먼저 해당 강의에서는 JWT에 대해서 여러가지 메서드를 작성을 했습니다. 또한 작성한 코드를 사용하지 않는 부분도 존재하는걸로 알고 있습니다.
즉 작성만 하고 사용하지는 않는것이죠
그렇게 구성했던 이유는 이렇게도 작성이 가능하다는 부분을 알려드리고 싶어서 이런식으로 구성을 해보았습니다. 이런 과정을 통해서 단편적인 사고보다는 좀 더 넓게 보실 수 있는 경험을 제공해 드리고 싶었어요
checkTokenForRefresh
함수는 말씀하신 그대로, 기본적으로 TokenExpiredException
을 감지하면 token을 디코딩 처리하여 반환해 줍니다.
public static DecodedJWT checkTokenForRefresh(String token) {
try {
DecodedJWT decoded = JWT.require(Algorithm.HMAC256(secretKey)).build().verify(token);
log.error("token must be expired : {}", decoded.getSubject());
throw new CustomException(ErrorCode.ACCESS_TOKEN_IS_NOT_EXPIRED);
} catch (AlgorithmMismatchException | SignatureVerificationException | InvalidClaimException e) {
throw new CustomException(ErrorCode.TOKEN_IS_INVALID);
} catch (TokenExpiredException e) {
return JWT.decode(token);
}
}
질문주셨던 의도대로, 해당 함수를 사용한다면, refresh 가능한 토큰인지 확인이 가능 여부를 확인이 가능한걸로 보입니다.
보시면 try
하는 부분에서도 정상적으로 진행이 되어도, expired
상태가 아니기 떄문에, exception
처리를 하고 있습니다.
Refresh
토큰은 사용하는곳도 있고 아닌곳도 있겠지만 기본적으로 사용하게 되었을 떄에는 사용자의 로그인 유효시간을 증가시키는 용도로 사용이 됩니다.
그래서 A라는 사용자의 기존 토큰이 만료가 된다면, 똑같이 A라는 사용자의 정보를 기반으로 token
을 생성해줘야 하기 떄문에, 사용이 되는 함수라고 보시면 됩니다.
즉 질문해주셨던 의도가 맞습니다!! 물론 해당 프로젝트에서는 사용하지않는 함수이지만요 ㅎㅎ
질문에 대해서 대답이 되었을까요?? 혹시라도 추가적인 질문이 있다면 남겨주세요!! 성심성의껏 답변해드리도록 하겠습니다.
감사합니다!
1
안녕하세요, 인프런 AI 인턴입니다. 한상희님.
Spring Boot에서 JWT 토큰과 관련된 checkTokenForRefresh
메서드에 대해 질문해 주셨군요. 이 메서드는 주로 토큰이 만료되었는지 검사하고, 만료되었을 경우 새 토큰을 발급하기 위한 과정에 사용됩니다. 질문 주신 것처럼 createToken
을 호출하지 않는 이유는 만료된 토큰의 정보를 바탕으로 새로운 토큰을 재생성할 수 있기 때문입니다.
즉, 만료된 토큰의 페이로드(payload)에는 사용자와 관련된 정보가 포함되어 있어, 이를 이용해 새로운 토큰을 발급하게 됩니다. 일단 토큰이 만료되면 TokenExpiredException
이 발생하고, 이 오류를 잡아서 토큰을 갱신하는 로직을 처리할 수 있습니다. 이렇게 함으로써 클라이언트가 즉시 새로운 토큰을 받을 수 있는 구조를 갖추게 됩니다.
관련하여 좀 더 깊이 있는 설명이나 유사한 구현에 대한 예시를 참고하고자 한다면, 아래의 링크에서 더 많은 정보를 확인할 수 있습니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드립니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.