From 0ec905345def991cba5ad8c22185bee1819abd7e Mon Sep 17 00:00:00 2001 From: dh1180 Date: Fri, 1 Aug 2025 13:23:18 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EC=86=8C=EC=85=9C=20=EB=A1=9C=EA=B7=B8?= =?UTF-8?q?=EC=9D=B8=20OAuth2=20=EC=BD=9C=EB=B0=B1=20=EC=97=94=EB=93=9C?= =?UTF-8?q?=ED=8F=AC=EC=9D=B8=ED=8A=B8=20=EA=B5=AC=ED=98=84=20=EB=B0=8F=20?= =?UTF-8?q?=EC=95=B1=20=EB=94=A5=EB=A7=81=ED=81=AC=20=EB=A6=AC=EB=94=94?= =?UTF-8?q?=EB=A0=89=EC=85=98=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - /login/oauth2/code/{provider} 엔드포인트 구현 (Google, Kakao, Naver) - 소셜 인증 후 전달된 code 파라미터를 파싱하여 앱 딥링크로 리디렉션 (형식: hidaddy://callback?provider={provider}&code={code}) - Spring Security의 AuthenticationSuccessHandler 미작동 이슈로 직접 처리 --- .../controller/OAuth2CallbackController.java | 50 +++++++++++++++++++ .../hidaddy/jwt/JwtAuthenticationFilter.java | 1 + 2 files changed, 51 insertions(+) create mode 100644 src/main/java/Devroup/hidaddy/controller/OAuth2CallbackController.java diff --git a/src/main/java/Devroup/hidaddy/controller/OAuth2CallbackController.java b/src/main/java/Devroup/hidaddy/controller/OAuth2CallbackController.java new file mode 100644 index 0000000..7f88836 --- /dev/null +++ b/src/main/java/Devroup/hidaddy/controller/OAuth2CallbackController.java @@ -0,0 +1,50 @@ +package Devroup.hidaddy.controller; + +import io.swagger.v3.oas.annotations.Parameter; +import jakarta.servlet.http.HttpServletResponse; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; + +@Slf4j +@RestController +@RequestMapping("/login/oauth2/code") +@RequiredArgsConstructor +public class OAuth2CallbackController { + + @GetMapping("/kakao") + public void redirectKakao( + @Parameter(description = "카카오 인가 코드", required = true) + @RequestParam("code") String code, + HttpServletResponse response + ) throws IOException { + redirectToApp("kakao", code, response); + } + + @GetMapping("/naver") + public void redirectNaver( + @Parameter(description = "네이버 인가 코드", required = true) + @RequestParam("code") String code, + HttpServletResponse response + ) throws IOException { + redirectToApp("naver", code, response); + } + + @GetMapping("/google") + public void redirectGoogle( + @Parameter(description = "구글 인가 코드", required = true) + @RequestParam("code") String code, + HttpServletResponse response + ) throws IOException { + redirectToApp("google", code, response); + } + + private void redirectToApp(String provider, String code, HttpServletResponse response) throws IOException { + log.info("📥 [{} 콜백] 인가 코드 수신: {}", provider.toUpperCase(), code); + String redirectUrl = "hidaddy://callback?provider=" + provider + "&code=" + code; + log.info("🔀 앱으로 리디렉션: {}", redirectUrl); + response.sendRedirect(redirectUrl); + } +} diff --git a/src/main/java/Devroup/hidaddy/jwt/JwtAuthenticationFilter.java b/src/main/java/Devroup/hidaddy/jwt/JwtAuthenticationFilter.java index f9040ac..86491a3 100644 --- a/src/main/java/Devroup/hidaddy/jwt/JwtAuthenticationFilter.java +++ b/src/main/java/Devroup/hidaddy/jwt/JwtAuthenticationFilter.java @@ -85,6 +85,7 @@ protected void doFilterInternal(HttpServletRequest request, private boolean isPublicPath(String path) { return path.equals("/") || path.startsWith("/api/login") || + path.startsWith("/login/oauth2/code") || path.startsWith("/api/auth/tokens") || path.startsWith("/api/auth/renew") || path.startsWith("/auth") ||