@@ -47,14 +47,29 @@ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse
47
47
}
48
48
49
49
log .info ("JwtAuthenticationProcessingFilter 호출" );
50
- String accessToken = jwtService .extractAccessToken (request ).orElse (null );
50
+ // 사용자 요청 헤더에서 RefreshToken 추출-> RefreshToken이 없거나 유효하지 않다면 null
51
+ String refreshToken = jwtService .extractRefreshToken (request )
52
+ .filter (jwtService ::isTokenValid )
53
+ .orElse (null );
54
+
55
+ // 리프레시 토큰이 요청 헤더에 존재하고 유효하다면, AccessToken이 만료된 것 -> AccessToken 재발급
56
+ if (refreshToken != null ) {
57
+ String email = jwtService .extractEmail (refreshToken ).orElseThrow (() -> new TokenException (ErrorCode .INVALID_TOKEN ));
58
+ if (isRefreshTokenMatch (email , refreshToken )) {
59
+ String newAccessToken = jwtService .createAccessToken (email );
60
+ String newRefreshToken = jwtService .createRefreshToken (email );
61
+ jwtService .updateRefreshToken (email , newRefreshToken );
62
+ jwtService .sendAccessAndRefreshToken (response , newAccessToken , refreshToken );
63
+ }
64
+ return ;
65
+ }
51
66
52
- if (jwtService .isTokenValid (accessToken )) {
53
- jwtService .extractEmail (accessToken )
54
- .ifPresent (email -> memberRepository .findByEmail (email )
55
- .ifPresent (this ::saveAuthentication ));
67
+ // AccessToken을 검사하고 인증 처리
68
+ // AccessToken이 없거나 유효하지 않다면, 인증 객체가 담기지 않은 상태로 다음 필터로 넘어가기 때문에 403 에러 발생
69
+ // AccessToken이 유효하다면, 인증 객체가 담긴 상태로 다음 필터로 넘어가기 때문에 인증 성공
70
+ else {
71
+ checkAccessTokenAndAuthentication (request , response , filterChain );
56
72
}
57
- filterChain .doFilter (request , response );
58
73
}
59
74
60
75
public boolean isRefreshTokenMatch (String email , String refreshToken ) {
0 commit comments