From 05df3f2cb985303b704f2d19823ccc43e154046e Mon Sep 17 00:00:00 2001 From: ByeongGyu Jeon Date: Wed, 2 Apr 2025 02:19:20 +0900 Subject: [PATCH 1/4] =?UTF-8?q?chore:=20README=20API=20=EC=84=9C=EB=B2=84?= =?UTF-8?q?=20=EC=A3=BC=EC=86=8C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 77b01835..933acc4a 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ ## 개발 환경 설정 -[AWS API SERVER](http://ec2-13-209-127-186.ap-northeast-2.compute.amazonaws.com) +[AWS API SERVER](http://ec2-13-209-127-186.ap-northeast-2.compute.amazonaws.com:8080) --- * 루트 디렉토리(WEB3_4_Log4U_BE)에서 다음 명령 실행 From 014c9c6527f7ddff1fe68b5a499d0735dafab9a4 Mon Sep 17 00:00:00 2001 From: ByeongGyu Jeon Date: Wed, 2 Apr 2025 12:18:03 +0900 Subject: [PATCH 2/4] =?UTF-8?q?chore:=20sql=20=EC=B6=9C=EB=A0=A5=ED=95=98?= =?UTF-8?q?=EA=B2=8C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/application-dev.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index 657b79d4..ba70ea11 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -9,6 +9,12 @@ spring: hibernate: ddl-auto: create + + properties: + hibernate: + format_sql: true + show_sql: true + datasource: url: jdbc:mysql://localhost:3307/log4u username: dev From d9917d3d2a1014260004809395674d16014b0f72 Mon Sep 17 00:00:00 2001 From: ByeongGyu Jeon Date: Wed, 2 Apr 2025 12:27:49 +0900 Subject: [PATCH 3/4] =?UTF-8?q?fix:=20=EB=A6=AC=ED=94=84=EB=A0=88=EC=8B=9C?= =?UTF-8?q?=20=ED=86=A0=ED=81=B0=20=EC=9E=AC=EB=B0=9C=EA=B8=89=20=EC=8B=9C?= =?UTF-8?q?=20=EC=98=A4=EB=A5=98=20=EB=B0=9C=EC=83=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../oauth2/controller/OAuth2Controller.java | 20 +++++++++---------- .../common/oauth2/entity/RefreshToken.java | 2 +- .../oauth2/service/RefreshTokenService.java | 10 ++++++++-- 3 files changed, 18 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/example/log4u/common/oauth2/controller/OAuth2Controller.java b/src/main/java/com/example/log4u/common/oauth2/controller/OAuth2Controller.java index 5ab48af9..096614ed 100644 --- a/src/main/java/com/example/log4u/common/oauth2/controller/OAuth2Controller.java +++ b/src/main/java/com/example/log4u/common/oauth2/controller/OAuth2Controller.java @@ -6,8 +6,8 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import com.example.log4u.common.constants.TokenConstants; import com.example.log4u.common.oauth2.jwt.JwtUtil; -import com.example.log4u.common.oauth2.repository.RefreshTokenRepository; import com.example.log4u.common.oauth2.service.RefreshTokenService; import io.jsonwebtoken.ExpiredJwtException; @@ -23,7 +23,6 @@ public class OAuth2Controller { private final JwtUtil jwtUtil; private final RefreshTokenService refreshTokenService; - private final RefreshTokenRepository refreshTokenRepository; @GetMapping("/token/reissue") public ResponseEntity reissue( @@ -35,10 +34,10 @@ public ResponseEntity reissue( String access = null; Cookie[] cookies = request.getCookies(); for (Cookie cookie : cookies) { - if (cookie.getName().equals("refresh")) { + if (cookie.getName().equals(TokenConstants.REFRESH_TOKEN)) { refresh = cookie.getValue(); } - if (cookie.getName().equals("access")) { + if (cookie.getName().equals(TokenConstants.ACCESS_TOKEN)) { access = cookie.getValue(); } } @@ -57,7 +56,7 @@ public ResponseEntity reissue( // 토큰이 refresh인지 확인 (발급시 페이로드에 명시) String category = jwtUtil.getTokenType(refresh); - if (!category.equals("refresh")) { + if (!category.equals(TokenConstants.REFRESH_TOKEN)) { return new ResponseEntity<>("잘못된 토큰입니다.", HttpStatus.BAD_REQUEST); } @@ -67,21 +66,20 @@ public ResponseEntity reissue( private void createNewTokens(HttpServletResponse response, String access, String refresh) { // 기존 리프레시 토큰 삭제 - refreshTokenRepository.deleteByRefresh(refresh); + refreshTokenService.deleteRefreshToken(refresh); Long userId = jwtUtil.getUserId(access); String role = jwtUtil.getRole(access); String name = jwtUtil.getName(access); - String newAccessToken = jwtUtil.createJwt("access", userId, name, role, 600000L); - String newRefreshToken = jwtUtil.createJwt("refresh", userId, name, role, 600000L); + String newAccessToken = jwtUtil.createJwt(TokenConstants.ACCESS_TOKEN, userId, name, role, 600000L); + String newRefreshToken = jwtUtil.createJwt(TokenConstants.REFRESH_TOKEN, userId, name, role, 600000L); - response.addCookie(createCookie("refresh", newRefreshToken)); - response.addCookie(createCookie("access", newAccessToken)); + response.addCookie(createCookie(TokenConstants.REFRESH_TOKEN, newRefreshToken)); + response.addCookie(createCookie(TokenConstants.ACCESS_TOKEN, newAccessToken)); // 새 리프레시 토큰 저장 refreshTokenService.saveRefreshToken( - userId, name, refresh ); diff --git a/src/main/java/com/example/log4u/common/oauth2/entity/RefreshToken.java b/src/main/java/com/example/log4u/common/oauth2/entity/RefreshToken.java index 9b050155..6aaf8cb8 100644 --- a/src/main/java/com/example/log4u/common/oauth2/entity/RefreshToken.java +++ b/src/main/java/com/example/log4u/common/oauth2/entity/RefreshToken.java @@ -22,7 +22,7 @@ public class RefreshToken { @Setter private String name; - @Column(nullable = false) + @Column(nullable = false, unique = true) @Setter private String refresh; diff --git a/src/main/java/com/example/log4u/common/oauth2/service/RefreshTokenService.java b/src/main/java/com/example/log4u/common/oauth2/service/RefreshTokenService.java index a6c9edb3..43bfcab1 100644 --- a/src/main/java/com/example/log4u/common/oauth2/service/RefreshTokenService.java +++ b/src/main/java/com/example/log4u/common/oauth2/service/RefreshTokenService.java @@ -8,6 +8,7 @@ import com.example.log4u.common.oauth2.entity.RefreshToken; import com.example.log4u.common.oauth2.repository.RefreshTokenRepository; +import jakarta.transaction.Transactional; import lombok.RequiredArgsConstructor; @Service @@ -19,15 +20,20 @@ public class RefreshTokenService { @Value("${jwt.refresh-token-expire-time-seconds}") private long refreshTokenValidityInSeconds; - public void saveRefreshToken(Long userId, String name, String refresh) { + public void saveRefreshToken(String name, String refresh) { Date date = new Date(System.currentTimeMillis() + refreshTokenValidityInSeconds); RefreshToken refreshToken = new RefreshToken( - userId, + null, name, refresh, date.toString() ); refreshTokenRepository.save(refreshToken); } + + @Transactional + public void deleteRefreshToken(String refresh) { + refreshTokenRepository.deleteByRefresh(refresh); + } } From ee832dc83ceaf112f3a46a96dc17837d138c3002 Mon Sep 17 00:00:00 2001 From: ByeongGyu Jeon Date: Wed, 2 Apr 2025 12:32:03 +0900 Subject: [PATCH 4/4] =?UTF-8?q?refactor:=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20=ED=8C=8C=EB=9D=BC=EB=AF=B8=ED=84=B0=20=EC=A0=9C?= =?UTF-8?q?=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../oauth2/handler/OAuth2AuthenticationSuccessHandler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/example/log4u/common/oauth2/handler/OAuth2AuthenticationSuccessHandler.java b/src/main/java/com/example/log4u/common/oauth2/handler/OAuth2AuthenticationSuccessHandler.java index 96f6e81d..14208fd0 100644 --- a/src/main/java/com/example/log4u/common/oauth2/handler/OAuth2AuthenticationSuccessHandler.java +++ b/src/main/java/com/example/log4u/common/oauth2/handler/OAuth2AuthenticationSuccessHandler.java @@ -76,7 +76,7 @@ private void setCookieAndSaveRefreshToken( String refresh = jwtUtil.createJwt(REFRESH_TOKEN_KEY, userId, name, role, refreshTokenValidityInSeconds); // 리프레시 토큰 DB 저장 - refreshTokenService.saveRefreshToken(null, name, refresh); + refreshTokenService.saveRefreshToken(name, refresh); response.addCookie(createCookie(ACCESS_TOKEN_KEY, access)); response.addCookie(createCookie(REFRESH_TOKEN_KEY, refresh));