From 8d2f64fa71fe4ff774f5f96c6a5f81ebd71206f8 Mon Sep 17 00:00:00 2001 From: wlgns12370 Date: Mon, 11 Aug 2025 07:42:53 +0900 Subject: [PATCH 1/3] =?UTF-8?q?MOSU-297=20feat:=20=EC=B9=B4=EC=B9=B4?= =?UTF-8?q?=EC=98=A4=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=EC=8B=A4=ED=8C=A8=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../handler/OAuth2LoginFailureHandler.java | 43 +++++++++++++++---- 1 file changed, 35 insertions(+), 8 deletions(-) diff --git a/src/main/java/life/mosu/mosuserver/global/handler/OAuth2LoginFailureHandler.java b/src/main/java/life/mosu/mosuserver/global/handler/OAuth2LoginFailureHandler.java index 2964bc52..f2c26ea3 100644 --- a/src/main/java/life/mosu/mosuserver/global/handler/OAuth2LoginFailureHandler.java +++ b/src/main/java/life/mosu/mosuserver/global/handler/OAuth2LoginFailureHandler.java @@ -1,29 +1,56 @@ package life.mosu.mosuserver.global.handler; +import com.fasterxml.jackson.databind.ObjectMapper; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; +import life.mosu.mosuserver.global.exception.ErrorResponse; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; import org.springframework.security.core.AuthenticationException; import org.springframework.security.oauth2.core.OAuth2AuthenticationException; import org.springframework.security.oauth2.core.OAuth2Error; -import org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler; +import org.springframework.security.web.authentication.AuthenticationFailureHandler; import org.springframework.stereotype.Component; @Slf4j @Component -public class OAuth2LoginFailureHandler extends SimpleUrlAuthenticationFailureHandler { +@RequiredArgsConstructor +public class OAuth2LoginFailureHandler implements + AuthenticationFailureHandler { + + private final ObjectMapper objectMapper; @Override public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, AuthenticationException exception) throws IOException, ServletException { - if (exception instanceof OAuth2AuthenticationException) { - OAuth2Error error = ((OAuth2AuthenticationException) exception).getError(); - log.info("OAuth2 Error " + error.getErrorCode()); - log.info("OAuth2 Description " + error.getDescription()); - log.info(error.toString()); + + String errorCode = "UNKNOWN_ERROR"; + String errorMessage = "로그인에 실패했습니다. 관리자에게 문의하세요."; + + if (exception instanceof OAuth2AuthenticationException oAuth2Ex) { + OAuth2Error error = oAuth2Ex.getError(); + errorCode = error.getErrorCode(); + errorMessage = error.getDescription() != null ? error.getDescription() : errorCode; + + log.info("OAuth2 Error: {}, Description: {}", error.getErrorCode(), + error.getDescription()); } - super.onAuthenticationFailure(request, response, exception); + + ErrorResponse errorResponse = ErrorResponse.builder() + .status(HttpStatus.UNAUTHORIZED.value()) + .message("인증에 실패했습니다") + .errors(errorMessage) + .code(errorCode) + .build(); + + response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); + response.setContentType("application/json;charset=UTF-8"); + response.setContentType(MediaType.APPLICATION_JSON_VALUE); + + objectMapper.writeValue(response.getWriter(), errorResponse); } } From b01684d362e16a2ca806d174b64855ac2d4b46a8 Mon Sep 17 00:00:00 2001 From: wlgns12370 Date: Mon, 11 Aug 2025 07:50:48 +0900 Subject: [PATCH 2/3] MOSU refactor: set secure flag to false for development cookies --- .../life/mosu/mosuserver/global/util/CookieBuilderUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/life/mosu/mosuserver/global/util/CookieBuilderUtil.java b/src/main/java/life/mosu/mosuserver/global/util/CookieBuilderUtil.java index 3949908e..b34fc5e9 100644 --- a/src/main/java/life/mosu/mosuserver/global/util/CookieBuilderUtil.java +++ b/src/main/java/life/mosu/mosuserver/global/util/CookieBuilderUtil.java @@ -65,7 +65,7 @@ public static String createLocalCookieString(String name, String value, Long max public static ResponseCookie createDevelopResponseCookie(String name, String value, Long maxAge) { return createBaseResponseCookieBuilder(name, value, maxAge) - .secure(true) + .secure(false) .domain(".mosuedu.com") .sameSite("Strict") .build(); From f410cab319e923703f617eb6852266caf93252fa Mon Sep 17 00:00:00 2001 From: wlgns12370 Date: Mon, 11 Aug 2025 07:55:04 +0900 Subject: [PATCH 3/3] MOSU refactor: set secure flag to true for development cookies --- .../life/mosu/mosuserver/global/util/CookieBuilderUtil.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/life/mosu/mosuserver/global/util/CookieBuilderUtil.java b/src/main/java/life/mosu/mosuserver/global/util/CookieBuilderUtil.java index b34fc5e9..7f5ea9aa 100644 --- a/src/main/java/life/mosu/mosuserver/global/util/CookieBuilderUtil.java +++ b/src/main/java/life/mosu/mosuserver/global/util/CookieBuilderUtil.java @@ -65,7 +65,7 @@ public static String createLocalCookieString(String name, String value, Long max public static ResponseCookie createDevelopResponseCookie(String name, String value, Long maxAge) { return createBaseResponseCookieBuilder(name, value, maxAge) - .secure(false) + .secure(true) .domain(".mosuedu.com") .sameSite("Strict") .build(); @@ -81,7 +81,7 @@ public static ResponseCookie createDevelopResponseCookie(String name, String val */ public static Cookie createDevelopCookie(String name, String value, Long maxAge) { Cookie cookie = createBaseServletCookie(name, value, maxAge); - cookie.setSecure(false); + cookie.setSecure(true); cookie.setDomain(".mosuedu.com"); return cookie; }