From ff9fe6ec0235334af58d3b9da70f035531e26035 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=A0=95=ED=95=B8=EB=AA=A8?= Date: Sun, 31 Dec 2023 08:07:31 +0900 Subject: [PATCH 1/4] =?UTF-8?q?fix:=20status=20401=EC=9D=B4=20=EB=82=B4?= =?UTF-8?q?=EB=A0=A4=EA=B0=88=20=EB=95=8C=20=EC=BF=A0=ED=82=A4=20=EB=AA=A8?= =?UTF-8?q?=EB=91=90=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../auth/application/AuthCookieService.java | 8 ++++-- .../auth/application/SignOutService.java | 2 +- .../security/filter/RefreshTokenFilter.java | 2 ++ .../auth/api/SignOutControllerTest.java | 28 +++++++++++++++++-- 4 files changed, 35 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/keeper/homepage/domain/auth/application/AuthCookieService.java b/src/main/java/com/keeper/homepage/domain/auth/application/AuthCookieService.java index a6d4947db..e71f9286a 100644 --- a/src/main/java/com/keeper/homepage/domain/auth/application/AuthCookieService.java +++ b/src/main/java/com/keeper/homepage/domain/auth/application/AuthCookieService.java @@ -39,9 +39,13 @@ private void setTokenInCookie(HttpServletResponse httpResponse, String token, in httpResponse.addHeader(HttpHeaders.SET_COOKIE, cookie.toString()); } - public void setCookieExpired(String authId, HttpServletResponse response) { + public void setCookieExpiredWithRedis(String authId, HttpServletResponse response) { + setCookieExpired(response); + redisUtil.deleteData(authId); + } + + public void setCookieExpired(HttpServletResponse response) { setTokenInCookie(response, "", 0, REFRESH_TOKEN.getTokenName()); setTokenInCookie(response, "", 0, ACCESS_TOKEN.getTokenName()); - redisUtil.deleteData(authId); } } diff --git a/src/main/java/com/keeper/homepage/domain/auth/application/SignOutService.java b/src/main/java/com/keeper/homepage/domain/auth/application/SignOutService.java index 09ddac90d..69bf953d8 100644 --- a/src/main/java/com/keeper/homepage/domain/auth/application/SignOutService.java +++ b/src/main/java/com/keeper/homepage/domain/auth/application/SignOutService.java @@ -12,6 +12,6 @@ public class SignOutService { private final AuthCookieService authCookieService; public void signOut(Member me, HttpServletResponse response) { - authCookieService.setCookieExpired(String.valueOf(me.getId()), response); + authCookieService.setCookieExpiredWithRedis(String.valueOf(me.getId()), response); } } diff --git a/src/main/java/com/keeper/homepage/global/config/security/filter/RefreshTokenFilter.java b/src/main/java/com/keeper/homepage/global/config/security/filter/RefreshTokenFilter.java index 838d68d6f..691a9f1a9 100644 --- a/src/main/java/com/keeper/homepage/global/config/security/filter/RefreshTokenFilter.java +++ b/src/main/java/com/keeper/homepage/global/config/security/filter/RefreshTokenFilter.java @@ -53,6 +53,8 @@ public void doFilter(ServletRequest request, ServletResponse response, FilterCha HttpServletResponse httpResponse = (HttpServletResponse) response; authCookieService.setNewCookieInResponse(authId, roles, httpRequest.getHeader(USER_AGENT), httpResponse); + } else { + authCookieService.setCookieExpired((HttpServletResponse) response); } filterChain.doFilter(request, response); diff --git a/src/test/java/com/keeper/homepage/domain/auth/api/SignOutControllerTest.java b/src/test/java/com/keeper/homepage/domain/auth/api/SignOutControllerTest.java index 690e51ba2..515fab34f 100644 --- a/src/test/java/com/keeper/homepage/domain/auth/api/SignOutControllerTest.java +++ b/src/test/java/com/keeper/homepage/domain/auth/api/SignOutControllerTest.java @@ -15,10 +15,12 @@ import com.keeper.homepage.IntegrationTest; import com.keeper.homepage.domain.member.entity.Member; import jakarta.servlet.http.Cookie; +import org.jetbrains.annotations.NotNull; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; +import org.springframework.test.web.servlet.ResultActions; class SignOutControllerTest extends IntegrationTest { @@ -40,8 +42,7 @@ void should_successfullySignOut_when_validRequest() throws Exception { jwtTokenProvider.createAccessToken(ACCESS_TOKEN, member.getId(), ROLE_회원)); Cookie refreshTokenCookie = new Cookie(REFRESH_TOKEN.getTokenName(), jwtTokenProvider.createAccessToken(REFRESH_TOKEN, member.getId(), ROLE_회원)); - mockMvc.perform(post("/sign-out") - .cookie(accessTokenCookie, refreshTokenCookie)) + callSignOutApi(accessTokenCookie, refreshTokenCookie) .andExpect(status().isNoContent()) .andExpect(cookie().maxAge(ACCESS_TOKEN.getTokenName(), 0)) .andExpect(cookie().maxAge(REFRESH_TOKEN.getTokenName(), 0)) @@ -53,5 +54,28 @@ void should_successfullySignOut_when_validRequest() throws Exception { assertThat(redisUtil.getData(String.valueOf(member.getId()), String.class)).isEmpty(); } + + @Test + @DisplayName("RT도 AT도 만료되었으면 로그아웃시에 쿠키는 지워져야 한다") + void should_tokenDeleted_when_expiredTokens() throws Exception { + // PK: 0 + // ROLE: 회원 + // expired: 2023년 1월 25일 + String expiredRefreshToken = "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIwIiwicm9sZXMiOiJST0xFX-2ajOybkCIsImlhdCI6MTY3NDYzMDk2MCwiZXhwIjoxNjc0NjMwOTYwfQ.qcAfEzhDulqsl6HCg8dziVlJoTPORpSUi5sjbCqTg_E"; + Cookie expiredRefreshCookie = new Cookie(REFRESH_TOKEN.getTokenName(), expiredRefreshToken); + String expiredToken = "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxIiwicm9sZXMiOiJST0xFX-2ajOybkCIsImlhdCI6MTY3NDQ1MjM1NSwiZXhwIjoxNjc0NDUyMzU1fQ.FoRbgOGlzLwizp9jQNmM6pET4zA8TPXa56zZlsl6Al8"; + Cookie expiredCookie = new Cookie(ACCESS_TOKEN.getTokenName(), expiredToken); + + callSignOutApi(expiredCookie, expiredRefreshCookie) + .andExpect(status().isUnauthorized()) + .andExpect(cookie().maxAge(ACCESS_TOKEN.getTokenName(), 0)) + .andExpect(cookie().maxAge(REFRESH_TOKEN.getTokenName(), 0)); + } + + @NotNull + private ResultActions callSignOutApi(Cookie accessTokenCookie, Cookie refreshTokenCookie) throws Exception { + return mockMvc.perform(post("/sign-out") + .cookie(accessTokenCookie, refreshTokenCookie)); + } } } From 9209049cb534540c18f9f22eeb9310cca6ec2847 Mon Sep 17 00:00:00 2001 From: shkisme Date: Tue, 30 Jan 2024 17:10:33 +0900 Subject: [PATCH 2/4] =?UTF-8?q?fix:=20=EC=84=B8=EB=AF=B8=EB=82=98=20?= =?UTF-8?q?=ED=95=99=EA=B8=B0=20=EA=B3=84=EC=82=B0=20=EC=98=A4=EB=A5=98=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/keeper/homepage/global/util/semester/SemesterUtil.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/com/keeper/homepage/global/util/semester/SemesterUtil.java b/src/main/java/com/keeper/homepage/global/util/semester/SemesterUtil.java index 72b7c430a..1a78c8afd 100644 --- a/src/main/java/com/keeper/homepage/global/util/semester/SemesterUtil.java +++ b/src/main/java/com/keeper/homepage/global/util/semester/SemesterUtil.java @@ -26,6 +26,9 @@ public static LocalDate getSemesterFirstDate(LocalDate now) { if (FIRST_SEMESTER.contains(now.getMonth())) { return LocalDate.of(now.getYear(), MARCH, 1); } + if (now.getMonth() == JANUARY || now.getMonth() == FEBRUARY) { + return LocalDate.of(now.getYear() - 1, SEPTEMBER, 1); + } return LocalDate.of(now.getYear(), SEPTEMBER, 1); } } From 58cba1e247f15dfe9f9940d9412f6953254b0a0f Mon Sep 17 00:00:00 2001 From: shkisme Date: Tue, 30 Jan 2024 17:10:48 +0900 Subject: [PATCH 3/4] =?UTF-8?q?feat:=20=EA=B5=AC=EA=B8=80=20=ED=8F=AC?= =?UTF-8?q?=EB=A9=94=ED=84=B0=20=EB=93=B1=EB=A1=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- intellij-java-google-style.xml | 598 +++++++++++++++++++++++++++++++++ 1 file changed, 598 insertions(+) create mode 100644 intellij-java-google-style.xml diff --git a/intellij-java-google-style.xml b/intellij-java-google-style.xml new file mode 100644 index 000000000..f3a6743ef --- /dev/null +++ b/intellij-java-google-style.xml @@ -0,0 +1,598 @@ + + + + + + From d5769e43e7bfa8d2db30b81d12a0e4bf886c02e0 Mon Sep 17 00:00:00 2001 From: shkisme Date: Tue, 30 Jan 2024 17:15:55 +0900 Subject: [PATCH 4/4] =?UTF-8?q?fix:=20GPT=20=EC=BD=94=EB=93=9C=20=EB=A6=AC?= =?UTF-8?q?=EB=B7=B0=20workflow=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/gpt_review.yml | 20 -------------------- 1 file changed, 20 deletions(-) delete mode 100644 .github/workflows/gpt_review.yml diff --git a/.github/workflows/gpt_review.yml b/.github/workflows/gpt_review.yml deleted file mode 100644 index d5886c27e..000000000 --- a/.github/workflows/gpt_review.yml +++ /dev/null @@ -1,20 +0,0 @@ -name: Code Review - -permissions: - contents: read - pull-requests: write - -on: - pull_request: - types: [opened, synchronize] - -jobs: - test: - if: ${{ contains(github.event.*.labels.*.name, 'gpt review') }} - runs-on: ubuntu-latest - steps: - - uses: anc95/ChatGPT-CodeReview@main - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} - LANGUAGE: Korean