From de43b4ba340a01591a5cdcbab23c0e61c9dbb030 Mon Sep 17 00:00:00 2001 From: eckrin Date: Wed, 22 Nov 2023 14:22:04 +0900 Subject: [PATCH 1/2] =?UTF-8?q?chore:=20refreshtoken=20=EB=A1=9C=EC=A7=81?= =?UTF-8?q?=20filterchain=20=EA=B1=B0=EC=B9=98=EA=B2=8C=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../QNotification.java | 2 +- .../kusitms/jipbap/auth/AuthController.java | 6 ----- .../com/kusitms/jipbap/auth/AuthService.java | 21 --------------- .../kusitms/jipbap/user/UserController.java | 7 +++++ .../com/kusitms/jipbap/user/UserService.java | 26 +++++++++++++++++++ 5 files changed, 34 insertions(+), 28 deletions(-) rename src/main/generated/com/kusitms/jipbap/{notifiication => notification}/QNotification.java (97%) diff --git a/src/main/generated/com/kusitms/jipbap/notifiication/QNotification.java b/src/main/generated/com/kusitms/jipbap/notification/QNotification.java similarity index 97% rename from src/main/generated/com/kusitms/jipbap/notifiication/QNotification.java rename to src/main/generated/com/kusitms/jipbap/notification/QNotification.java index 7e07401..e72d2c2 100644 --- a/src/main/generated/com/kusitms/jipbap/notifiication/QNotification.java +++ b/src/main/generated/com/kusitms/jipbap/notification/QNotification.java @@ -16,7 +16,7 @@ @Generated("com.querydsl.codegen.DefaultEntitySerializer") public class QNotification extends EntityPathBase { - private static final long serialVersionUID = -150217532L; + private static final long serialVersionUID = -1943879295L; private static final PathInits INITS = PathInits.DIRECT2; diff --git a/src/main/java/com/kusitms/jipbap/auth/AuthController.java b/src/main/java/com/kusitms/jipbap/auth/AuthController.java index 8bf0246..6eed1c9 100644 --- a/src/main/java/com/kusitms/jipbap/auth/AuthController.java +++ b/src/main/java/com/kusitms/jipbap/auth/AuthController.java @@ -39,10 +39,4 @@ public CommonResponse kakaoVerification(@RequestBody Kak return new CommonResponse<>(authService.kakaoAutoSignIn(authService.getKakaoProfile(dto.getToken()))); } - @Operation(summary = "액세스 토큰 재발급 - 헤더에 refreshToken 정보 포함하여 요청") - @PostMapping("/reissue") - public CommonResponse reissue(@Auth AuthInfo authInfo) { - return new CommonResponse<>(authService.reissue(authInfo.getEmail(), authInfo.getToken())); - } - } diff --git a/src/main/java/com/kusitms/jipbap/auth/AuthService.java b/src/main/java/com/kusitms/jipbap/auth/AuthService.java index 2873254..748392e 100644 --- a/src/main/java/com/kusitms/jipbap/auth/AuthService.java +++ b/src/main/java/com/kusitms/jipbap/auth/AuthService.java @@ -164,25 +164,4 @@ public KakaoSignInResponseDto kakaoAutoSignIn(KakaoProfileDto profile) { findUser.updateOAuth(KAKAO); return new KakaoSignInResponseDto(signIn(kakaoUser.getEmail(), kakaoUser.getPassword()), isSignUp); } - - /** - * refreshtoken 갱 - * @param email - * @param refreshToken - * @return - */ - @Transactional - public ReissueResponseDto reissue(String email, String refreshToken) { - User user = userRepository.findByEmail(email).orElseThrow(()->new InvalidEmailException("회원정보가 존재하지 않습니다.")); - if(!user.getRefreshToken().equals(refreshToken)) { - throw new RefreshTokenNotFoundException("리프레쉬 토큰에서 유저정보를 찾을 수 없습니다."); - } - tokenProvider.validateToken(refreshToken); - - TokenInfo newAccessToken = tokenProvider.createAccessToken(user.getEmail(), user.getRole()); - TokenInfo newRefreshToken = tokenProvider.createRefreshToken(user.getEmail(), user.getRole()); - return new ReissueResponseDto( - newAccessToken.getToken(), newRefreshToken.getToken() - ); - } } diff --git a/src/main/java/com/kusitms/jipbap/user/UserController.java b/src/main/java/com/kusitms/jipbap/user/UserController.java index a46cfd4..f5fbb31 100644 --- a/src/main/java/com/kusitms/jipbap/user/UserController.java +++ b/src/main/java/com/kusitms/jipbap/user/UserController.java @@ -1,5 +1,6 @@ package com.kusitms.jipbap.user; +import com.kusitms.jipbap.auth.dto.ReissueResponseDto; import com.kusitms.jipbap.common.response.CommonResponse; import com.kusitms.jipbap.security.Auth; import com.kusitms.jipbap.security.AuthInfo; @@ -18,6 +19,12 @@ public class UserController { private final UserService userService; + @Operation(summary = "액세스 토큰 재발급 - 헤더에 refreshToken 정보 포함하여 요청") + @PostMapping("/reissue") + public CommonResponse reissue(@Auth AuthInfo authInfo) { + return new CommonResponse<>(userService.reissue(authInfo.getEmail(), authInfo.getToken())); + } + @Operation(summary = "로그아웃 - 리프레쉬 토큰 삭제") @PostMapping("/logout") public CommonResponse logout(@Auth AuthInfo authInfo) { diff --git a/src/main/java/com/kusitms/jipbap/user/UserService.java b/src/main/java/com/kusitms/jipbap/user/UserService.java index f0fdb55..c1e53ba 100644 --- a/src/main/java/com/kusitms/jipbap/user/UserService.java +++ b/src/main/java/com/kusitms/jipbap/user/UserService.java @@ -1,7 +1,11 @@ package com.kusitms.jipbap.user; +import com.kusitms.jipbap.auth.dto.ReissueResponseDto; import com.kusitms.jipbap.auth.exception.InvalidEmailException; +import com.kusitms.jipbap.auth.exception.RefreshTokenNotFoundException; import com.kusitms.jipbap.auth.exception.UsernameExistsException; +import com.kusitms.jipbap.security.jwt.JwtTokenProvider; +import com.kusitms.jipbap.security.jwt.TokenInfo; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -10,6 +14,28 @@ @Service public class UserService { private final UserRepository userRepository; + private final JwtTokenProvider tokenProvider; + + /** + * refreshtoken 갱신 + * @param email + * @param refreshToken + * @return + */ + @Transactional + public ReissueResponseDto reissue(String email, String refreshToken) { + User user = userRepository.findByEmail(email).orElseThrow(()->new InvalidEmailException("회원정보가 존재하지 않습니다.")); + if(!user.getRefreshToken().equals(refreshToken)) { + throw new RefreshTokenNotFoundException("리프레쉬 토큰에서 유저정보를 찾을 수 없습니다."); + } + tokenProvider.validateToken(refreshToken); + + TokenInfo newAccessToken = tokenProvider.createAccessToken(user.getEmail(), user.getRole()); + TokenInfo newRefreshToken = tokenProvider.createRefreshToken(user.getEmail(), user.getRole()); + return new ReissueResponseDto( + newAccessToken.getToken(), newRefreshToken.getToken() + ); + } /** * 로그아웃 - User의 RefreshToken 제거 From 2d33a91ac4df1eebd4e8ff70c66ae8b8c2904260 Mon Sep 17 00:00:00 2001 From: eckrin Date: Wed, 22 Nov 2023 14:22:49 +0900 Subject: [PATCH 2/2] =?UTF-8?q?fix:=20token=20validation=20=EA=B3=BC?= =?UTF-8?q?=EC=A0=95=EC=97=90=EC=84=9C=20refreshtoken=20=EA=B0=80=EA=B3=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/kusitms/jipbap/user/UserService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/kusitms/jipbap/user/UserService.java b/src/main/java/com/kusitms/jipbap/user/UserService.java index c1e53ba..01b03bf 100644 --- a/src/main/java/com/kusitms/jipbap/user/UserService.java +++ b/src/main/java/com/kusitms/jipbap/user/UserService.java @@ -28,7 +28,7 @@ public ReissueResponseDto reissue(String email, String refreshToken) { if(!user.getRefreshToken().equals(refreshToken)) { throw new RefreshTokenNotFoundException("리프레쉬 토큰에서 유저정보를 찾을 수 없습니다."); } - tokenProvider.validateToken(refreshToken); + tokenProvider.validateToken(tokenProvider.resolveToken(refreshToken)); TokenInfo newAccessToken = tokenProvider.createAccessToken(user.getEmail(), user.getRole()); TokenInfo newRefreshToken = tokenProvider.createRefreshToken(user.getEmail(), user.getRole());