
장점
단점
@Override
protected void doFilterInternal(
HttpServletRequest req, HttpServletResponse res, FilterChain filterChain)
throws ServletException, IOException {
String accessTokenValue = jwtUtil.getAccessTokenFromRequest(req);
String claimToToken;
if (StringUtils.hasText(accessTokenValue)) {
// JWT 토큰 substring
accessTokenValue = jwtUtil.substringToken(accessTokenValue);
log.info(accessTokenValue);
claimToToken = accessTokenValue;
try{
if (!jwtUtil.validateAccessToken(accessTokenValue)) {
jwtTokenError.messageToClient(res, 400, "토큰에 문제", "failed");
return;
}
}catch (ExpiredJwtException e) {
logger.error("Expired JWT token, 만료된 JWT AccessToken 입니다.");
String refreshTokenValue = jwtUtil.getRefreshTokenFromRequest(req);
refreshTokenValue = jwtUtil.substringToken(refreshTokenValue);
if (StringUtils.hasText(refreshTokenValue) && jwtUtil.validateRefreshToken(refreshTokenValue)){
String newAccessToken = jwtUtil.createAccessToken(jwtUtil.getUserInfoFromToken(refreshTokenValue).getSubject());
jwtUtil.addAccessTokenToCookie(newAccessToken, res);
claimToToken = jwtUtil.substringToken(newAccessToken);
} else {
jwtTokenError.messageToClient(res, 400, "토큰에 문제", "failed");
return;
}
}
Claims info = jwtUtil.getUserInfoFromToken(claimToToken);
try {
setAuthentication(info.getSubject());
} catch (Exception e) {
jwtTokenError.messageToClient(res, 400, "토큰에 문제", "failed");
return;
}
} else if (req.getRequestURI().startsWith("/user/")) {
filterChain.doFilter(req, res);
return;
} else {
jwtTokenError.messageToClient(res, 400, "토큰에 문제", "failed");
return;
}
filterChain.doFilter(req, res);
}