From d9211cc12b3adb87696723db283c24cbb2239b0c Mon Sep 17 00:00:00 2001 From: root Date: Mon, 23 Feb 2026 19:57:09 +0900 Subject: [PATCH 1/5] =?UTF-8?q?=EC=9D=BC=EB=B6=80=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/site/ocr/prd/contorllers/ImgController.java | 2 +- .../java/site/ocr/prd/contorllers/LoginController.java | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/prd/src/main/java/site/ocr/prd/contorllers/ImgController.java b/prd/src/main/java/site/ocr/prd/contorllers/ImgController.java index 03b12ab..e468c39 100644 --- a/prd/src/main/java/site/ocr/prd/contorllers/ImgController.java +++ b/prd/src/main/java/site/ocr/prd/contorllers/ImgController.java @@ -41,7 +41,7 @@ public class ImgController { //요청 전송 ResponseEntity response = - restTemplate.postForEntity("http://localhost:9002/ocr", + restTemplate.postForEntity("http://127.0.0.1:9002/ocr", requestEntity, String.class); return ResponseEntity.ok(response.getBody()); diff --git a/prd/src/main/java/site/ocr/prd/contorllers/LoginController.java b/prd/src/main/java/site/ocr/prd/contorllers/LoginController.java index c230344..7cd7632 100644 --- a/prd/src/main/java/site/ocr/prd/contorllers/LoginController.java +++ b/prd/src/main/java/site/ocr/prd/contorllers/LoginController.java @@ -7,7 +7,6 @@ import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.reactive.function.client.WebClient; import jakarta.servlet.http.HttpServletRequest; import site.ocr.prd.components.JwtProvider; @@ -26,11 +25,12 @@ import org.springframework.web.bind.annotation.RequestParam; public class LoginController { //service 선언 - private LoginService loginService = new LoginService(WebClient.builder()); + private final LoginService loginService; //JWT 선언 private final JwtProvider jwtProvider; - public LoginController(JwtProvider provider) { + public LoginController(LoginService loginService, JwtProvider provider) { + this.loginService = loginService; this.jwtProvider = provider; } /** @@ -38,7 +38,7 @@ public class LoginController { * @param redirectRespn 카카오에서 리다이렉트해준 인가코드 */ @GetMapping("/oauth/oauth-kakao-authorize") //kakao에서 get으로 리다이렉트 해줌 - public ResponseEntity kakaoLoginRequestDto(HttpServletRequest redirectRespn) { + public ResponseEntity kakaoLoginRequest(HttpServletRequest redirectRespn) { String code = redirectRespn.getParameter("code"); System.out.println("인가코드 :: " + code); From 6a2405a7828dd98940a90e5428a42bf9a0438aac Mon Sep 17 00:00:00 2001 From: byeori Date: Wed, 25 Feb 2026 17:51:55 +0900 Subject: [PATCH 2/5] =?UTF-8?q?ds=5Fstore=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- prd/.gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/prd/.gitignore b/prd/.gitignore index 472444d..6aa084c 100644 --- a/prd/.gitignore +++ b/prd/.gitignore @@ -1,4 +1,5 @@ HELP.md +.DS_Store .gradle build/ !gradle/wrapper/gradle-wrapper.jar From 89d1acf5c96195768399f6c599044fbe27052a40 Mon Sep 17 00:00:00 2001 From: byeori Date: Wed, 25 Feb 2026 17:53:07 +0900 Subject: [PATCH 3/5] =?UTF-8?q?=EA=B5=AC=EC=A1=B0=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- prd/.gitignore | 1 - .../ocr/prd/{ => config}/SecurityConfig.java | 4 +- .../ocr/prd/{ => config}/WebClientConfig.java | 4 +- .../ocr/prd/{ => config}/WebMVCConfig.java | 4 +- .../ocr/prd/contorllers/LoginController.java | 47 ++++++++++--------- .../site/ocr/prd/services/LoginService.java | 26 ++++++++-- 6 files changed, 56 insertions(+), 30 deletions(-) rename prd/src/main/java/site/ocr/prd/{ => config}/SecurityConfig.java (98%) rename prd/src/main/java/site/ocr/prd/{ => config}/WebClientConfig.java (93%) rename prd/src/main/java/site/ocr/prd/{ => config}/WebMVCConfig.java (89%) diff --git a/prd/.gitignore b/prd/.gitignore index 6aa084c..472444d 100644 --- a/prd/.gitignore +++ b/prd/.gitignore @@ -1,5 +1,4 @@ HELP.md -.DS_Store .gradle build/ !gradle/wrapper/gradle-wrapper.jar diff --git a/prd/src/main/java/site/ocr/prd/SecurityConfig.java b/prd/src/main/java/site/ocr/prd/config/SecurityConfig.java similarity index 98% rename from prd/src/main/java/site/ocr/prd/SecurityConfig.java rename to prd/src/main/java/site/ocr/prd/config/SecurityConfig.java index 1868c12..3c12a44 100644 --- a/prd/src/main/java/site/ocr/prd/SecurityConfig.java +++ b/prd/src/main/java/site/ocr/prd/config/SecurityConfig.java @@ -1,4 +1,4 @@ -package site.ocr.prd; +package site.ocr.prd.config; import java.util.List; @@ -32,4 +32,4 @@ public class SecurityConfig { return http.build(); } -} \ No newline at end of file +} diff --git a/prd/src/main/java/site/ocr/prd/WebClientConfig.java b/prd/src/main/java/site/ocr/prd/config/WebClientConfig.java similarity index 93% rename from prd/src/main/java/site/ocr/prd/WebClientConfig.java rename to prd/src/main/java/site/ocr/prd/config/WebClientConfig.java index 488511a..0cd4277 100644 --- a/prd/src/main/java/site/ocr/prd/WebClientConfig.java +++ b/prd/src/main/java/site/ocr/prd/config/WebClientConfig.java @@ -1,4 +1,4 @@ -package site.ocr.prd; +package site.ocr.prd.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -18,4 +18,4 @@ public class WebClientConfig { public RestTemplate restTemplate() { return new RestTemplate(); } -} \ No newline at end of file +} diff --git a/prd/src/main/java/site/ocr/prd/WebMVCConfig.java b/prd/src/main/java/site/ocr/prd/config/WebMVCConfig.java similarity index 89% rename from prd/src/main/java/site/ocr/prd/WebMVCConfig.java rename to prd/src/main/java/site/ocr/prd/config/WebMVCConfig.java index f111c94..79dc369 100644 --- a/prd/src/main/java/site/ocr/prd/WebMVCConfig.java +++ b/prd/src/main/java/site/ocr/prd/config/WebMVCConfig.java @@ -1,10 +1,12 @@ -package site.ocr.prd; +package site.ocr.prd.config; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; +import site.ocr.prd.SessionLoggingInterceptor; + @Configuration public class WebMVCConfig implements WebMvcConfigurer { diff --git a/prd/src/main/java/site/ocr/prd/contorllers/LoginController.java b/prd/src/main/java/site/ocr/prd/contorllers/LoginController.java index 7cd7632..5b322f7 100644 --- a/prd/src/main/java/site/ocr/prd/contorllers/LoginController.java +++ b/prd/src/main/java/site/ocr/prd/contorllers/LoginController.java @@ -1,5 +1,5 @@ package site.ocr.prd.contorllers; -import java.time.Duration; +import java.util.Map; import org.springframework.http.HttpHeaders; import org.springframework.http.ResponseCookie; @@ -9,7 +9,6 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestBody; import jakarta.servlet.http.HttpServletRequest; -import site.ocr.prd.components.JwtProvider; import site.ocr.prd.dto.LoginReqDTO; import site.ocr.prd.dto.LoginResDTO; import site.ocr.prd.dto.UserInfoInqyReqDTO; @@ -26,12 +25,9 @@ public class LoginController { //service 선언 private final LoginService loginService; - //JWT 선언 - private final JwtProvider jwtProvider; - public LoginController(LoginService loginService, JwtProvider provider) { + public LoginController(LoginService loginService) { this.loginService = loginService; - this.jwtProvider = provider; } /** * 프론트에서 카카오로 로그인 요청 후 카카오에서 리다이렉트 해준 인가코드로 토큰 발급 및 사용자정보 조회 @@ -74,23 +70,32 @@ public class LoginController { UserInfoInqyResDTO userInfoInqyResponse = loginService.getUserInfo(userInfoInqyRequest); System.out.println("사용자정보 :: " + userInfoInqyResponse.toString()); - /** - * jwt 생성 - * oauth를 통해 받은 토큰을 직접 사용하지 말고 id에 jwt키를 발급해서 사용 - * cookie에 저장 - */ - String jwt = jwtProvider.createJwtToken(userInfoInqyResponse.getId()); - ResponseCookie cookie = ResponseCookie.from("accessToken", jwt) - .httpOnly(true) - .secure(true) - .sameSite("Lax") - .maxAge(Duration.ofHours(1)) - .build(); + ResponseCookie cookie = loginService.createJwtCookie(Long.parseLong(userInfoInqyResponse.getId())); - return ResponseEntity.status(302) + Map response = new java.util.HashMap<>(); + response.put("success", true); + response.put("userId", userInfoInqyResponse.getId()); + response.put("message", "Login successful"); + response.put("userInfo", userInfoInqyResponse); + + return ResponseEntity.ok() .header(HttpHeaders.SET_COOKIE, cookie.toString()) - .header(HttpHeaders.LOCATION, "http://localhost:3000/main") - .build(); + .body(response); + } + + /** + * JWT 토큰 조회 (프론트에서 로그인 상태 확인용) + * @param userId 사용자 ID + * @return 로그인 결과 및 JWT 토큰 + */ + @GetMapping("/oauth/get-jwt-token") + public ResponseEntity> getJwtToken(@RequestParam Long userId) { + ResponseCookie cookie = loginService.createJwtCookie(userId); + Map response = new java.util.HashMap<>(); + response.put("token", cookie.toString()); + return ResponseEntity.ok() + .header(HttpHeaders.SET_COOKIE, cookie.toString()) + .body(response); } @GetMapping("login/oauth-kakao-token") diff --git a/prd/src/main/java/site/ocr/prd/services/LoginService.java b/prd/src/main/java/site/ocr/prd/services/LoginService.java index 7115e06..c456b29 100644 --- a/prd/src/main/java/site/ocr/prd/services/LoginService.java +++ b/prd/src/main/java/site/ocr/prd/services/LoginService.java @@ -1,13 +1,17 @@ package site.ocr.prd.services; +import java.time.Duration; + import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; +import org.springframework.http.ResponseCookie; import org.springframework.stereotype.Service; import org.springframework.web.reactive.function.BodyInserters; import org.springframework.web.reactive.function.client.WebClient; import com.fasterxml.jackson.databind.JsonNode; +import site.ocr.prd.components.JwtProvider; import site.ocr.prd.dto.LoginReqDTO; import site.ocr.prd.dto.LoginResDTO; import site.ocr.prd.dto.UserInfoInqyReqDTO; @@ -18,11 +22,12 @@ public class LoginService { //webclient builder private final WebClient webClient; + //JWT provider + private final JwtProvider jwtProvider; - - - public LoginService(WebClient.Builder builder) { + public LoginService(WebClient.Builder builder, JwtProvider jwtProvider) { this.webClient = builder.build(); + this.jwtProvider = jwtProvider; } public LoginResDTO getToken(LoginReqDTO request) { @@ -65,4 +70,19 @@ public class LoginService { return result; } + + /** + * JWT 토큰을 생성하고 ResponseCookie로 변환 + * @param userId 사용자 ID + * @return ResponseCookie JWT 토큰이 포함된 쿠키 + */ + public ResponseCookie createJwtCookie(Long userId) { + String jwt = jwtProvider.createJwtToken(userId); + return ResponseCookie.from("accessToken", jwt) + .httpOnly(true) + .secure(true) + .sameSite("Lax") + .maxAge(Duration.ofHours(1)) + .build(); + } } \ No newline at end of file From 5fd0c0356012cdde565eb9582596720692bc63e6 Mon Sep 17 00:00:00 2001 From: root Date: Fri, 27 Feb 2026 11:14:31 +0900 Subject: [PATCH 4/5] =?UTF-8?q?userid=20=ED=83=80=EC=9E=85=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/site/ocr/prd/contorllers/LoginController.java | 4 ++-- prd/src/main/java/site/ocr/prd/services/LoginService.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/prd/src/main/java/site/ocr/prd/contorllers/LoginController.java b/prd/src/main/java/site/ocr/prd/contorllers/LoginController.java index 5b322f7..39bce53 100644 --- a/prd/src/main/java/site/ocr/prd/contorllers/LoginController.java +++ b/prd/src/main/java/site/ocr/prd/contorllers/LoginController.java @@ -70,7 +70,7 @@ public class LoginController { UserInfoInqyResDTO userInfoInqyResponse = loginService.getUserInfo(userInfoInqyRequest); System.out.println("사용자정보 :: " + userInfoInqyResponse.toString()); - ResponseCookie cookie = loginService.createJwtCookie(Long.parseLong(userInfoInqyResponse.getId())); + ResponseCookie cookie = loginService.createJwtCookie(userInfoInqyResponse.getId()); Map response = new java.util.HashMap<>(); response.put("success", true); @@ -89,7 +89,7 @@ public class LoginController { * @return 로그인 결과 및 JWT 토큰 */ @GetMapping("/oauth/get-jwt-token") - public ResponseEntity> getJwtToken(@RequestParam Long userId) { + public ResponseEntity> getJwtToken(@RequestParam String userId) { ResponseCookie cookie = loginService.createJwtCookie(userId); Map response = new java.util.HashMap<>(); response.put("token", cookie.toString()); diff --git a/prd/src/main/java/site/ocr/prd/services/LoginService.java b/prd/src/main/java/site/ocr/prd/services/LoginService.java index c456b29..d96934d 100644 --- a/prd/src/main/java/site/ocr/prd/services/LoginService.java +++ b/prd/src/main/java/site/ocr/prd/services/LoginService.java @@ -76,7 +76,7 @@ public class LoginService { * @param userId 사용자 ID * @return ResponseCookie JWT 토큰이 포함된 쿠키 */ - public ResponseCookie createJwtCookie(Long userId) { + public ResponseCookie createJwtCookie(String userId) { String jwt = jwtProvider.createJwtToken(userId); return ResponseCookie.from("accessToken", jwt) .httpOnly(true) From fee9b12395e5c944fd9f9f0313d9cfa0373b640b Mon Sep 17 00:00:00 2001 From: root Date: Fri, 27 Feb 2026 18:16:26 +0900 Subject: [PATCH 5/5] =?UTF-8?q?=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=EA=B5=AC?= =?UTF-8?q?=EC=A1=B0=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ocr/prd/contorllers/LoginController.java | 23 ++++++++++++------- .../site/ocr/prd/services/LoginService.java | 11 ++++++--- 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/prd/src/main/java/site/ocr/prd/contorllers/LoginController.java b/prd/src/main/java/site/ocr/prd/contorllers/LoginController.java index 39bce53..fdbe767 100644 --- a/prd/src/main/java/site/ocr/prd/contorllers/LoginController.java +++ b/prd/src/main/java/site/ocr/prd/contorllers/LoginController.java @@ -1,6 +1,9 @@ package site.ocr.prd.contorllers; import java.util.Map; +import org.slf4j.Logger; +import java.util.HashMap; +import org.slf4j.LoggerFactory; import org.springframework.http.HttpHeaders; import org.springframework.http.ResponseCookie; import org.springframework.http.ResponseEntity; @@ -23,6 +26,9 @@ import org.springframework.web.bind.annotation.RequestParam; @Controller public class LoginController { + //Logger 선언 + private static final Logger logger = LoggerFactory.getLogger(LoginController.class); + //service 선언 private final LoginService loginService; @@ -34,9 +40,9 @@ public class LoginController { * @param redirectRespn 카카오에서 리다이렉트해준 인가코드 */ @GetMapping("/oauth/oauth-kakao-authorize") //kakao에서 get으로 리다이렉트 해줌 - public ResponseEntity kakaoLoginRequest(HttpServletRequest redirectRespn) { + public ResponseEntity> kakaoLoginRequest(HttpServletRequest redirectRespn) { String code = redirectRespn.getParameter("code"); - System.out.println("인가코드 :: " + code); + logger.info("인가코드 :: " + code); /** * 카카오에 토큰값 요청 @@ -58,7 +64,7 @@ public class LoginController { * @param refresh_token 사용자 리프레시 토큰 */ LoginResDTO loginResult = loginService.getToken(loginRequest); - System.out.println("결과 :: " + loginResult.toString()); + logger.info("토큰발급 결과 :: " + loginResult.toString()); UserInfoInqyReqDTO userInfoInqyRequest = new UserInfoInqyReqDTO(); userInfoInqyRequest.setAccess_token(loginResult.getAccess_token()); @@ -68,18 +74,19 @@ public class LoginController { * @param access_token 사용자정보 조회용 토큰 */ UserInfoInqyResDTO userInfoInqyResponse = loginService.getUserInfo(userInfoInqyRequest); - System.out.println("사용자정보 :: " + userInfoInqyResponse.toString()); + logger.info("사용자정보 :: " + userInfoInqyResponse.toString()); ResponseCookie cookie = loginService.createJwtCookie(userInfoInqyResponse.getId()); - Map response = new java.util.HashMap<>(); - response.put("success", true); + Map response = new HashMap<>(); + response.put("success", "true"); response.put("userId", userInfoInqyResponse.getId()); response.put("message", "Login successful"); - response.put("userInfo", userInfoInqyResponse); + response.put("userInfo", userInfoInqyResponse.getName()); - return ResponseEntity.ok() + return ResponseEntity.status(302) .header(HttpHeaders.SET_COOKIE, cookie.toString()) + .header(HttpHeaders.LOCATION, "http://localhost:3000/pages/oauth/callback") .body(response); } diff --git a/prd/src/main/java/site/ocr/prd/services/LoginService.java b/prd/src/main/java/site/ocr/prd/services/LoginService.java index d96934d..f83ada3 100644 --- a/prd/src/main/java/site/ocr/prd/services/LoginService.java +++ b/prd/src/main/java/site/ocr/prd/services/LoginService.java @@ -2,6 +2,8 @@ package site.ocr.prd.services; import java.time.Duration; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.http.ResponseCookie; @@ -20,6 +22,9 @@ import site.ocr.prd.dto.UserInfoInqyResDTO; @Service public class LoginService { + //logger 선언 + private static final Logger logger = LoggerFactory.getLogger(LoginService.class); + //webclient builder private final WebClient webClient; //JWT provider @@ -31,7 +36,7 @@ public class LoginService { } public LoginResDTO getToken(LoginReqDTO request) { - System.out.println("kakao auth code = {}" + request.getCode()); + logger.info("kakao auth code :: " + request.getCode()); LoginResDTO result = webClient.post() .uri("https://kauth.kakao.com/oauth/token") @@ -59,11 +64,11 @@ public class LoginService { .block(); //사용자ID + //jsonnode :: {"id":4438121341,"connected_at":"2025-09-09T03:53:23Z"} + logger.info("jsonnode :: " + root.toString()); String id = root.path("id").asText(); String name = root.path("name").asText(); String email = root.path("email").asText(); - //jsonnode :: {"id":4438121341,"connected_at":"2025-09-09T03:53:23Z"} - System.out.println("jsonnode :: " + root.toString()); result.setId(id); result.setName(name); result.setEmail(email);