jwt 10분 유효기간 끝나면 apiServer 쪽에서 Expired Exception 발생
552
작성한 질문수 1
jwt 10분 유효기간 끝난 상황에서
jwtAxios를 이용해서 products 를 호출하면
JWTCheckFilter를 걸쳐서 validateToken 메서드를 호출하고 거기서 Exired Exception 이 납니다.
accessToken 이 유효시간(10분)이 경과하였으면
refreshToken 으로 교체되는 걸로 강의내용을 인지했었는데요.
제가 어디서 놓친건지 잘 모르겠네요 ㅠ
react쪽에서 beforeReq 쪽에서 결국 expired 처리가되고
brforeRes 에서 뭔가 유효기간이 끝났으면
/api/member/refresh 를 호출해야될 것 같은데
예제 소스 잘 따라한거
filter에서 먼저 유효기간이 만료되어 exception 부터 호출되어 더이상 진행이 안되네요.
어디가 정확히 문제인지 모르겠네요.
jwtUtil.js 는 제공해주신 소스는 오타가 있을까봐
동일하게 ctrl+c , v 도 했습니다.
JWTUtil.java 일부분
public static Map<String, Object> validateToken(String token) {
Map<String, Object> claim = null;
try {
SecretKey key = Keys.hmacShaKeyFor(JWTUtil.key.getBytes("UTF-8"));
claim = Jwts.parserBuilder()
.setSigningKey(key)
.build()
.parseClaimsJws(token) // 파싱 및 검증, 실패 시 에러
.getBody();
} catch (MalformedJwtException malformedJwtException) {
throw new CustomJWTException("MalFormed");
} catch (ExpiredJwtException expiredJwtException) {
throw new CustomJWTException("Expired");
} catch (InvalidClaimException invalidClaimException) {
throw new CustomJWTException("Invalid");
} catch (JwtException jwtException) {
throw new CustomJWTException("JWTError");
} catch (Exception e) {
throw new CustomJWTException("Error");
}
return claim;
}
답변 3
0
올려두신 코드에서는 JWTCheckFilter에서
만료된 Access Token이 들어오면
response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
과 같이 예외를 발생하게 됩니다.
예제에서는 만료된 Access Token의 경우는 정상적인 응답으로 처리하고 이를 리액트에서 해석한 후에 Refresh Token을 요구하고 있습니다. 이 부분을 401상태로 처리하셔서 Refresh Token을 얻기 위한 호출이 없네요..
아래의 코드처럼 정상적인 메세지를 만드시면 자동으로 refresh가 이루어집니다.
Gson gson = new Gson();
String msg = gson.toJson(Map.of("error", "ERROR_ACCESS_TOKEN"));
response.setContentType("application/json");
PrintWriter printWriter = response.getWriter();
printWriter.println(msg);
printWriter.close();
0
response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
응답코드 때문이였 이였군요!
ㅠㅠ 찾기 어려웠었는데 같이 확인해주셔서 감사합니다!
큰 도움 되었습니다
0
build.gradle에서
//jwt
implementation 'com.google.code.gson:gson:2.10.1'
implementation 'io.jsonwebtoken:jjwt-api:0.11.5'
runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.11.5'
runtimeOnly 'io.jsonwebtoken:jjwt-jackson:0.11.5'본인 코드에서는 jsonwebtoken의 gson이 추가되어 있네요.. 이거 때문에 날짜 변환시에 double값이 생기면서 문제가 생긴거 같습니다.
다른 원인들도 살펴보고 있으니 저녁에 댓글 확인해 주세요^^
0
이해하시는 내용이 맞습니다.
Access Token은 만료되면 우선 만료되었다는 메시지가 전송됩니다. -- 1st
이후에 리프레시를 위한 경로를 호출할 때 Access Token과 Refresh Token모두가 필요합니다. -- 2nd
2nd 호출은 리액트 쪽에서 진행되어야 합니다. 이 부분에 문제가 있는 것인지 살펴봐야 하는데..
올려주신 코드만으로는 파악이 좀 어렵네요..
깃헙의 경로를 알려주시거나..
https://drive.google.com/drive/folders/1ZLHRKaXx8Ou8kZNd1WE6qALxq_wJODXW
에 본인이 작성하신 코드를 올려주시면 살펴볼 수 있습니다.
동일하게 실습하는데 이상하게 페이지를 찾지 못하네요..
0
72
2
22. REST 방식 컨트롤러 만들기(2), 29. 등록처리 부분 질문이 있습니다.
0
74
2
37강. 강의수업듣다 질문드립니다.
0
56
2
TodoDTO test 함수
0
80
3
강사님 오타 있음요
0
77
2
No 1. 교제(ppt) soruce 복붙 문제 의 건
0
94
4
No 1. 교제(ppt) soruce 복붙 문제 의 건
0
70
3
17강 문의드립니다.
0
44
1
카카오 연동설정이 이제 안되는거 같아요
0
187
2
8장 마지막 강의 시 오류
0
98
4
혹시 뭐가 문제인지 알 수 있나요?
0
87
2
챕터: React-Router 설정
0
58
2
백)TODO관련
0
56
2
마리아 db 설치중 포트를 이미 사용중이라고 합니다
0
109
2
이강의 듣고 소화시켰다면 몇년차 정도 개발자라고 할수 있을까요?
0
105
1
CSR , SSR 의 수요 궁금증 질문
0
81
2
섹션5부터...
0
72
1
간단한 코드 질문!!
0
59
2
tbl_todo 질문입니다
0
64
2
수업 외 질문인데 'tbl'이 무슨 의미인가요???
0
288
2
엔티티클래스에서 질문입니다
0
77
2
수정시 writer값이 삭제되는 오류
0
41
2
교안 31 오타 수정해주세요
0
62
2
쿠키에 accessToken, refreshToken을 담고, 조회 시에 undefined
0
78
1





