From 9521962ea20d772d1dd1794bd8b880e7cabc62fe Mon Sep 17 00:00:00 2001 From: wlgns12370 Date: Thu, 7 Aug 2025 00:53:04 +0900 Subject: [PATCH 01/11] =?UTF-8?q?MOSU-216=20fix:=20exam=20=EB=82=A0?= =?UTF-8?q?=EC=A7=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../global/initializer/DatabaseInitializer.java | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/main/java/life/mosu/mosuserver/global/initializer/DatabaseInitializer.java b/src/main/java/life/mosu/mosuserver/global/initializer/DatabaseInitializer.java index 9dae13f2..844341f7 100644 --- a/src/main/java/life/mosu/mosuserver/global/initializer/DatabaseInitializer.java +++ b/src/main/java/life/mosu/mosuserver/global/initializer/DatabaseInitializer.java @@ -12,8 +12,6 @@ import life.mosu.mosuserver.domain.application.entity.ApplicationJpaEntity; import life.mosu.mosuserver.domain.application.entity.Subject; import life.mosu.mosuserver.domain.application.repository.ApplicationJpaRepository; -import life.mosu.mosuserver.domain.event.entity.DurationJpaVO; -import life.mosu.mosuserver.domain.event.entity.EventJpaEntity; import life.mosu.mosuserver.domain.event.repository.EventJpaRepository; import life.mosu.mosuserver.domain.exam.entity.AddressJpaVO; import life.mosu.mosuserver.domain.exam.entity.Area; @@ -195,7 +193,7 @@ private List createExams() { createExam("노변중학교", Area.DAEGU, "42677", "대구광역시 달서구 장기로 76", LocalDate.of(2025, 10, 19), 392), createExam("노변중학교", Area.DAEGU, "42677", "대구광역시 달서구 장기로 76", - LocalDate.of(2025, 11, 2), 392) + LocalDate.of(2025, 10, 26), 392) ); return examRepository.saveAll(exams); @@ -314,12 +312,12 @@ private void createBoardItems(List users, Random random) { inquiryRepository.save(inquiry); } - eventRepository.save(EventJpaEntity.builder() - .title("이벤트 " + i) - .duration(new DurationJpaVO(LocalDate.now().plusDays(i), - LocalDate.now().plusDays(i + 5))) - .eventLink("https://mosu.life/event/" + i) - .build()); +// eventRepository.save(EventJpaEntity.builder() +// .title("이벤트 " + i) +// .duration(new DurationJpaVO(LocalDate.now().plusDays(i), +// LocalDate.now().plusDays(i + 5))) +// .eventLink("https://mosu.life/event/" + i) +// .build()); } } From 946b4a219e00136c5aa004284a97cfcf7c8b4f87 Mon Sep 17 00:00:00 2001 From: wlgns12370 Date: Thu, 7 Aug 2025 00:53:59 +0900 Subject: [PATCH 02/11] =?UTF-8?q?MOSU-216=20refactor:=20Gender=20Enum=20?= =?UTF-8?q?=ED=95=9C=EA=B5=AD=EC=96=B4=EB=A1=9C=20=EB=B0=98=ED=99=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/user/dto/response/UserInfoResponse.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/life/mosu/mosuserver/presentation/user/dto/response/UserInfoResponse.java b/src/main/java/life/mosu/mosuserver/presentation/user/dto/response/UserInfoResponse.java index eb4ed891..30be383e 100644 --- a/src/main/java/life/mosu/mosuserver/presentation/user/dto/response/UserInfoResponse.java +++ b/src/main/java/life/mosu/mosuserver/presentation/user/dto/response/UserInfoResponse.java @@ -15,7 +15,7 @@ public static UserInfoResponse from(UserJpaEntity user) { user.getName(), user.getBirth(), user.getPhoneNumber(), - user.getGender() != null ? user.getGender().name() : null + user.getGender() != null ? user.getGender().getGenderName() : null ); } } From 6c056fb3d3097f1fe8b7fa63ac9616dfca501df0 Mon Sep 17 00:00:00 2001 From: wlgns12370 Date: Thu, 7 Aug 2025 00:54:17 +0900 Subject: [PATCH 03/11] =?UTF-8?q?MOSU-216=20refactor:=20=EB=B6=88=ED=95=84?= =?UTF-8?q?=EC=9A=94=ED=95=9C=20log=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mosu/mosuserver/application/oauth/OAuthUserService.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/life/mosu/mosuserver/application/oauth/OAuthUserService.java b/src/main/java/life/mosu/mosuserver/application/oauth/OAuthUserService.java index 03c64742..d69c88b9 100644 --- a/src/main/java/life/mosu/mosuserver/application/oauth/OAuthUserService.java +++ b/src/main/java/life/mosu/mosuserver/application/oauth/OAuthUserService.java @@ -30,7 +30,6 @@ public OAuth2User loadUser(final OAuth2UserRequest userRequest) final OAuth2User user = super.loadUser(userRequest); final Map oAuth2UserAttributes = user.getAttributes(); - log.info("KKK OAuth2User attributes: {}", oAuth2UserAttributes); final String registrationId = userRequest.getClientRegistration().getRegistrationId(); final String userNameAttributeName = userRequest.getClientRegistration() @@ -63,7 +62,7 @@ private UserJpaEntity updateOrWrite(final OAuthUserInfo info) { final UserJpaEntity newUser = UserJpaEntity.builder() //TODO kakao 정보 null일 경우 후처리 필요, ServiceTerm 승인 시 처리 구현 .loginId(info.email() != null ? info.email() : "NA") - .gender(info.gender() != null ? info.gender() : Gender.MALE) + .gender(info.gender() != null ? info.gender() : Gender.PENDING) .name(info.name() != null ? info.name() : "NA") .birth(info.birthDay() != null ? info.birthDay() : LocalDate.EPOCH) From 8d158a498e8b4f80750a38b79fb889562009a362 Mon Sep 17 00:00:00 2001 From: wlgns12370 Date: Thu, 7 Aug 2025 03:35:49 +0900 Subject: [PATCH 04/11] =?UTF-8?q?MOSU-216=20feat:=20=EC=B9=B4=EC=B9=B4?= =?UTF-8?q?=EC=98=A4=20=EB=A7=88=EC=BC=80=ED=8C=85=20=EC=88=98=EC=8B=A0=20?= =?UTF-8?q?=EB=8F=99=EC=9D=98=20=EB=A1=9C=EC=A7=81=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../application/oauth/OAuthUserInfo.java | 12 +++-- .../application/oauth/OAuthUserService.java | 45 +++++++++++++++++-- src/main/resources/security-config.yml | 1 + 3 files changed, 51 insertions(+), 7 deletions(-) diff --git a/src/main/java/life/mosu/mosuserver/application/oauth/OAuthUserInfo.java b/src/main/java/life/mosu/mosuserver/application/oauth/OAuthUserInfo.java index 60889c4a..52ec2d4a 100644 --- a/src/main/java/life/mosu/mosuserver/application/oauth/OAuthUserInfo.java +++ b/src/main/java/life/mosu/mosuserver/application/oauth/OAuthUserInfo.java @@ -17,20 +17,23 @@ public record OAuthUserInfo( String name, Gender gender, String phoneNumber, - LocalDate birthDay + LocalDate birthDay, + boolean marketingAgreed ) { public static OAuthUserInfo of( final OAuthProvider oAuthProvider, - final Map attributes + final Map attributes, + final boolean marketingAgreed ) { return switch (oAuthProvider) { - case KAKAO -> ofKakao(attributes); + case KAKAO -> ofKakao(attributes, marketingAgreed); default -> throw new CustomRuntimeException(ErrorCode.UNSUPPORTED_OAUTH2_PROVIDER); }; } - private static OAuthUserInfo ofKakao(final Map attributes) { + private static OAuthUserInfo ofKakao(final Map attributes, + final boolean marketingAgreed) { Map account = Optional.ofNullable( (Map) attributes.get("kakao_account")) .orElse(Map.of()); @@ -68,6 +71,7 @@ private static OAuthUserInfo ofKakao(final Map attributes) { .phoneNumber(phoneNumber) .gender(gender) .birthDay(birthDate) + .marketingAgreed(marketingAgreed) .build(); } } \ No newline at end of file diff --git a/src/main/java/life/mosu/mosuserver/application/oauth/OAuthUserService.java b/src/main/java/life/mosu/mosuserver/application/oauth/OAuthUserService.java index d69c88b9..f67b968d 100644 --- a/src/main/java/life/mosu/mosuserver/application/oauth/OAuthUserService.java +++ b/src/main/java/life/mosu/mosuserver/application/oauth/OAuthUserService.java @@ -1,6 +1,8 @@ package life.mosu.mosuserver.application.oauth; import java.time.LocalDate; +import java.util.Collections; +import java.util.List; import java.util.Map; import life.mosu.mosuserver.domain.profile.entity.Gender; import life.mosu.mosuserver.domain.profile.repository.ProfileJpaRepository; @@ -10,11 +12,13 @@ import life.mosu.mosuserver.domain.user.repository.UserJpaRepository; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.core.ParameterizedTypeReference; import org.springframework.security.oauth2.client.userinfo.DefaultOAuth2UserService; import org.springframework.security.oauth2.client.userinfo.OAuth2UserRequest; import org.springframework.security.oauth2.core.OAuth2AuthenticationException; import org.springframework.security.oauth2.core.user.OAuth2User; import org.springframework.stereotype.Service; +import org.springframework.web.reactive.function.client.WebClient; @Slf4j @Service @@ -23,6 +27,7 @@ public class OAuthUserService extends DefaultOAuth2UserService { private final UserJpaRepository userRepository; private final ProfileJpaRepository profileRepository; + private final WebClient webClient; @Override public OAuth2User loadUser(final OAuth2UserRequest userRequest) @@ -31,6 +36,20 @@ public OAuth2User loadUser(final OAuth2UserRequest userRequest) final Map oAuth2UserAttributes = user.getAttributes(); + Map serviceTermsAttributes = getServiceTerms( + userRequest.getAccessToken().getTokenValue()); + + boolean agreedToMarketing = false; + if (serviceTermsAttributes.get("service_terms") instanceof List termsList) { + agreedToMarketing = termsList.stream() + .filter(term -> term instanceof Map) + .map(term -> (Map) term) + .filter(termMap -> "terms_03".equals(termMap.get("tag"))) + .findFirst() + .map(termMap -> (Boolean) termMap.get("agreed")) + .orElse(false); + } + final String registrationId = userRequest.getClientRegistration().getRegistrationId(); final String userNameAttributeName = userRequest.getClientRegistration() .getProviderDetails() @@ -38,7 +57,7 @@ public OAuth2User loadUser(final OAuth2UserRequest userRequest) .getUserNameAttributeName(); final OAuthUserInfo userInfo = OAuthUserInfo.of(OAuthProvider.from(registrationId), - oAuth2UserAttributes); + oAuth2UserAttributes, agreedToMarketing); final UserJpaEntity oAuthUser = updateOrWrite(userInfo); @@ -60,7 +79,6 @@ private UserJpaEntity updateOrWrite(final OAuthUserInfo info) { }) .orElseGet(() -> { final UserJpaEntity newUser = UserJpaEntity.builder() - //TODO kakao 정보 null일 경우 후처리 필요, ServiceTerm 승인 시 처리 구현 .loginId(info.email() != null ? info.email() : "NA") .gender(info.gender() != null ? info.gender() : Gender.PENDING) .name(info.name() != null ? info.name() : "NA") @@ -72,9 +90,30 @@ private UserJpaEntity updateOrWrite(final OAuthUserInfo info) { .provider(AuthProvider.KAKAO) .agreedToTermsOfService(true) .agreedToPrivacyPolicy(true) - .agreedToMarketing(false) + .agreedToMarketing(info.marketingAgreed()) .build(); return userRepository.save(newUser); }); } + + private Map getServiceTerms(String accessToken) { + + String url = "https://kapi.kakao.com/v2/user/service_terms"; + + try { + Map response = webClient.get() + .uri(url) + .header("Authorization", "Bearer " + accessToken) + .retrieve() + .bodyToMono(new ParameterizedTypeReference>() { + }) + .block(); + + log.info(response.toString()); + return response != null ? response : Collections.emptyMap(); + } catch (Exception e) { + log.error("Failed to fetch service terms from Kakao with WebClient", e); + return Collections.emptyMap(); + } + } } diff --git a/src/main/resources/security-config.yml b/src/main/resources/security-config.yml index f0a90b2c..523cb69c 100644 --- a/src/main/resources/security-config.yml +++ b/src/main/resources/security-config.yml @@ -16,6 +16,7 @@ spring: - birthday - birthyear - phone_number + service-terms: terms_03 client-name: kakao provider: kakao: From 48ac0c643a624ebd1386aa69bf677275dd9d221d Mon Sep 17 00:00:00 2001 From: wlgns12370 Date: Thu, 7 Aug 2025 03:36:29 +0900 Subject: [PATCH 05/11] =?UTF-8?q?MOSU-216=20feat:=20=EC=B9=B4=EC=B9=B4?= =?UTF-8?q?=EC=98=A4=20=EB=A7=88=EC=BC=80=ED=8C=85=20=EC=88=98=EC=8B=A0=20?= =?UTF-8?q?=EB=8F=99=EC=9D=98=20=ED=99=94=EB=A9=B4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...th2AuthorizationRequestResolverConfig.java | 21 -------------- .../AuthorizationRequestRedirectResolver.java | 29 ++++++++++++++----- 2 files changed, 21 insertions(+), 29 deletions(-) delete mode 100644 src/main/java/life/mosu/mosuserver/global/config/OAuth2AuthorizationRequestResolverConfig.java diff --git a/src/main/java/life/mosu/mosuserver/global/config/OAuth2AuthorizationRequestResolverConfig.java b/src/main/java/life/mosu/mosuserver/global/config/OAuth2AuthorizationRequestResolverConfig.java deleted file mode 100644 index 58c1502f..00000000 --- a/src/main/java/life/mosu/mosuserver/global/config/OAuth2AuthorizationRequestResolverConfig.java +++ /dev/null @@ -1,21 +0,0 @@ -package life.mosu.mosuserver.global.config; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository; -import org.springframework.security.oauth2.client.web.DefaultOAuth2AuthorizationRequestResolver; -import org.springframework.security.oauth2.client.web.OAuth2AuthorizationRequestRedirectFilter; - -@Configuration -public class OAuth2AuthorizationRequestResolverConfig { - - @Bean - public DefaultOAuth2AuthorizationRequestResolver defaultAuthorizationRequestResolver( - ClientRegistrationRepository clientRegistrationRepository - ) { - return new DefaultOAuth2AuthorizationRequestResolver( - clientRegistrationRepository, - OAuth2AuthorizationRequestRedirectFilter.DEFAULT_AUTHORIZATION_REQUEST_BASE_URI - ); - } -} \ No newline at end of file diff --git a/src/main/java/life/mosu/mosuserver/global/resolver/AuthorizationRequestRedirectResolver.java b/src/main/java/life/mosu/mosuserver/global/resolver/AuthorizationRequestRedirectResolver.java index 7272cc08..293d93ab 100644 --- a/src/main/java/life/mosu/mosuserver/global/resolver/AuthorizationRequestRedirectResolver.java +++ b/src/main/java/life/mosu/mosuserver/global/resolver/AuthorizationRequestRedirectResolver.java @@ -2,22 +2,34 @@ import jakarta.servlet.http.HttpServletRequest; import java.util.Map; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository; import org.springframework.security.oauth2.client.web.DefaultOAuth2AuthorizationRequestResolver; +import org.springframework.security.oauth2.client.web.OAuth2AuthorizationRequestRedirectFilter; import org.springframework.security.oauth2.client.web.OAuth2AuthorizationRequestResolver; import org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationRequest; import org.springframework.security.web.util.UrlUtils; import org.springframework.stereotype.Component; import org.springframework.web.util.UriComponentsBuilder; -@Slf4j + @Component -@RequiredArgsConstructor public class AuthorizationRequestRedirectResolver implements OAuth2AuthorizationRequestResolver { public static final String REDIRECT_PARAM_KEY = "redirect"; private final DefaultOAuth2AuthorizationRequestResolver defaultResolver; + private final String kakaoServiceTerms; + + public AuthorizationRequestRedirectResolver( + ClientRegistrationRepository clientRegistrationRepository, + @Value("${spring.security.oauth2.client.registration.kakao.service-terms}") String kakaoServiceTerms + ) { + this.defaultResolver = new DefaultOAuth2AuthorizationRequestResolver( + clientRegistrationRepository, + OAuth2AuthorizationRequestRedirectFilter.DEFAULT_AUTHORIZATION_REQUEST_BASE_URI + ); + this.kakaoServiceTerms = kakaoServiceTerms; + } @Override public OAuth2AuthorizationRequest resolve(HttpServletRequest request) { @@ -45,15 +57,16 @@ private OAuth2AuthorizationRequest addRedirectState( String redirect = request.getParameter(REDIRECT_PARAM_KEY); if (!UrlUtils.isValidRedirectUrl(redirect)) { - log.debug("Invalid redirect URL: {}", redirect); - return authorizationRequest; - } - log.debug("Adding redirect state to authorization request: {}", redirect); + return OAuth2AuthorizationRequest.from(authorizationRequest) + .additionalParameters(params -> params.put("service_terms", kakaoServiceTerms)) + .build(); + } return OAuth2AuthorizationRequest.from(authorizationRequest) .state(appendToState(authorizationRequest.getState(), Map.of(REDIRECT_PARAM_KEY, redirect))) + .additionalParameters(params -> params.put("service_terms", kakaoServiceTerms)) .build(); } From 740d1b2c292b8fbf66c4ffc13a1db03cfc8e4558 Mon Sep 17 00:00:00 2001 From: wlgns12370 Date: Thu, 7 Aug 2025 12:24:47 +0900 Subject: [PATCH 06/11] =?UTF-8?q?MOSU=20fix:=20KMC=20API=20=EC=97=B0?= =?UTF-8?q?=EB=8F=99=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EB=A1=9C=EC=A7=81=20?= =?UTF-8?q?=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../infra/kmc/legacy/KmcMvcController.java | 79 ---------- .../infra/kmc/legacy/LegacyService.java | 73 --------- src/main/webapp/WEB-INF/views/request.jsp | 18 --- src/main/webapp/WEB-INF/views/result.jsp | 58 -------- src/main/webapp/WEB-INF/views/start.jsp | 93 ------------ src/main/webapp/WEB-INF/views/step1.jsp | 140 ------------------ src/main/webapp/WEB-INF/views/step2.jsp | 47 ------ 7 files changed, 508 deletions(-) delete mode 100644 src/main/java/life/mosu/mosuserver/infra/kmc/legacy/KmcMvcController.java delete mode 100644 src/main/java/life/mosu/mosuserver/infra/kmc/legacy/LegacyService.java delete mode 100644 src/main/webapp/WEB-INF/views/request.jsp delete mode 100644 src/main/webapp/WEB-INF/views/result.jsp delete mode 100644 src/main/webapp/WEB-INF/views/start.jsp delete mode 100644 src/main/webapp/WEB-INF/views/step1.jsp delete mode 100644 src/main/webapp/WEB-INF/views/step2.jsp diff --git a/src/main/java/life/mosu/mosuserver/infra/kmc/legacy/KmcMvcController.java b/src/main/java/life/mosu/mosuserver/infra/kmc/legacy/KmcMvcController.java deleted file mode 100644 index 17404255..00000000 --- a/src/main/java/life/mosu/mosuserver/infra/kmc/legacy/KmcMvcController.java +++ /dev/null @@ -1,79 +0,0 @@ -package life.mosu.mosuserver.infra.kmc.legacy; - -import static life.mosu.mosuserver.global.util.EncodeUtil.decodeURIComponent; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import life.mosu.mosuserver.infra.kmc.KmcService; -import life.mosu.mosuserver.infra.kmc.dto.KmcCertRequest; -import life.mosu.mosuserver.infra.kmc.dto.KmcPlusInfo; -import life.mosu.mosuserver.infra.kmc.dto.KmcUserInfo; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Controller; -import org.springframework.ui.Model; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; - -@Slf4j -@Controller -@RequestMapping("/kmc") // URL 경로를 /kmc로 통일 -@RequiredArgsConstructor -public class KmcMvcController { - - private final LegacyService legacyService; - private final KmcService kmcService; - private final ObjectMapper objectMapper; - - /** - * 인증 요청 페이지를 렌더링하고, KMC로 보낼 암호화 데이터를 생성 - */ - @GetMapping("/req") - public String getKmcPage(Model model) { - // 서비스 로직을 통해 암호화된 tr_cert 생성 - - KmcCertRequest request = KmcCertRequest.of("{\"redirect\":\"password\",\"loginId\":\"userid1\",\"serviceTerm\":\"null\"}"); - String decodePlusInfo = decodeURIComponent(request.plusInfo()); - - log.info("복호화 성공!:" + decodePlusInfo); - try { - KmcPlusInfo plusInfo = objectMapper.readValue(decodePlusInfo, KmcPlusInfo.class); - log.info("파싱 성공: {}", plusInfo); - } catch (JsonProcessingException e) { - log.error("JSON 파싱 실패", e); - } - - - String cert = kmcService.createCertRequest(request).tr_cert(); - - model.addAttribute("tr_cert", cert); - model.addAttribute("tr_url", "http://localhost:8080/api/v1/kmc/tr-url"); - model.addAttribute("tr_ver", "V2"); - - return "step2"; // step2.jsp 렌더링 - } - - /** - * KMC가 tr_url로 리디렉션할 때 호출되는 콜백 메소드 - */ - @PostMapping("/tr-url") - public String handleKmcResult( - @RequestParam("apiToken") String apiToken, - @RequestParam("certNum") String apiCertNum, - Model model - ) { - log.info("KMC 콜백 수신 성공! apiToken:{}, apiCertNum:{}", apiToken, apiCertNum); - - try { - // 토큰 검증 및 사용자 정보 조회 로직 - KmcUserInfo userInfo = legacyService.validateTokenAndGetResult(apiToken, apiCertNum); - model.addAttribute("userInfo", userInfo); - return "success"; // 성공 시 보여줄 JSP 페이지 - } catch (Exception e) { - model.addAttribute("errorMessage", e.getMessage()); - return "error"; // 실패 시 보여줄 JSP 페이지 - } - } -} \ No newline at end of file diff --git a/src/main/java/life/mosu/mosuserver/infra/kmc/legacy/LegacyService.java b/src/main/java/life/mosu/mosuserver/infra/kmc/legacy/LegacyService.java deleted file mode 100644 index 6f951bf0..00000000 --- a/src/main/java/life/mosu/mosuserver/infra/kmc/legacy/LegacyService.java +++ /dev/null @@ -1,73 +0,0 @@ -package life.mosu.mosuserver.infra.kmc.legacy; - -import com.icert.comm.secu.IcertSecuManager; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import life.mosu.mosuserver.infra.kmc.KmcService; -import life.mosu.mosuserver.infra.kmc.dto.KmcApiRequest; -import life.mosu.mosuserver.infra.kmc.dto.KmcUserInfo; -import life.mosu.mosuserver.infra.kmc.dto.KmcVerificationRequest; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.http.MediaType; -import org.springframework.stereotype.Service; -import org.springframework.web.reactive.function.client.WebClient; - -@Slf4j -@Service -@RequiredArgsConstructor -public class LegacyService { - - private final IcertSecuManager seed; - private final KmcService kmcService; - private final WebClient webClient = WebClient.builder() - .baseUrl("https://www.kmcert.com/kmcis/api") - .build(); - - /** - * KMC 콜백 수신 후, 토큰을 검증하고 최종 사용자 정보를 복호화하여 반환하는 통합 메소드 - * @param encryptedApiToken KMC로부터 받은 암호화된 API 토큰 - * @param apiCertNum KMC로부터 받은 요청 번호 (현재 로직에서는 사용되지 않음) - * @return 복호화된 사용자 정보가 담긴 DTO - */ - public KmcUserInfo validateTokenAndGetResult(String encryptedApiToken, String apiCertNum) { - log.info("[KMCIS] 토큰 검증 및 결과 복호화를 시작합니다. certNum: {}", apiCertNum); - - // 1. KMC 토큰 검증 API 호출 - KmcVerificationRequest apiResponse = callTokenValidationApi(encryptedApiToken); - - // 2. API 응답 코드 확인 - if (!"APR01".equals(apiResponse.resultCode())) { - log.error("❌ KMC 토큰 검증 실패. 응답 코드: {}", apiResponse.resultCode()); - throw new RuntimeException("KMC 본인인증에 실패했습니다. (오류코드: " + apiResponse.resultCode() + ")"); - } - log.info("✅ 토큰 검증 성공 (APR01). 최종 데이터 복호화를 진행합니다."); - - // 3. 최종 데이터(rec_cert) 복호화 - return kmcService.processVerificationResult(apiResponse); - } - - /** - * KMC 토큰 검증 API를 호출하는 내부 메소드 - */ - public KmcVerificationRequest callTokenValidationApi(String encryptedApiToken) { - - String apiToken = seed.getDec(encryptedApiToken, ""); - String apiDate = DateTimeFormatter.ofPattern("yyyyMMddHHmmss").format(LocalDateTime.now()); - KmcApiRequest requestPayload = new KmcApiRequest(apiToken, apiDate); - - log.info("apiToken: {}, apiDate: {}", requestPayload.apiToken(), requestPayload.apiDate()); - try { - return webClient.post() - .uri("/kmcisToken_api.jsp") - .contentType(MediaType.APPLICATION_JSON) - .bodyValue(requestPayload) - .retrieve() - .bodyToMono(KmcVerificationRequest.class) - .block(); - } catch (Exception e) { - log.error("❌ 토큰 검증 API 호출 중 예외 발생", e); - throw new RuntimeException("KMC 서버와 통신 중 오류가 발생했습니다.", e); - } - } -} diff --git a/src/main/webapp/WEB-INF/views/request.jsp b/src/main/webapp/WEB-INF/views/request.jsp deleted file mode 100644 index 402bd494..00000000 --- a/src/main/webapp/WEB-INF/views/request.jsp +++ /dev/null @@ -1,18 +0,0 @@ -<%@ page contentType="text/html;charset=UTF-8" language="java" %> - - - KMC 본인인증 요청 - - - -

KMC 본인인증 페이지로 이동 중입니다. 잠시만 기다려주세요...

- -[cite_start] -
<%-- [cite: 134] --%> - [cite_start] <%-- [cite: 137] --%> - [cite_start] <%-- [cite: 137] --%> - [cite_start] <%-- 서비스 요청 버전 V2 [cite: 284] --%> -
- - \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/result.jsp b/src/main/webapp/WEB-INF/views/result.jsp deleted file mode 100644 index e2d139cd..00000000 --- a/src/main/webapp/WEB-INF/views/result.jsp +++ /dev/null @@ -1,58 +0,0 @@ -<%@ page contentType="text/html;charset=UTF-8" language="java" %> -<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> - - - KMC 본인인증 결과 - - -

KMC 본인인증 결과

- - -

인증 실패

-

오류: ${error}

-
- -

인증 성공

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
이름${result.name}
생년월일${result.birth}
성별${result.gender == '0' ? '남자' : '여자'}
휴대폰 번호${result.phoneNo}
통신사${result.phoneCorp}
연계정보 (CI)${result.ci}
중복가입확인정보 (DI)${result.di}
요청번호${result.certNum}
-
- -

결과 데이터가 없습니다.

-
-
-
-[다시 테스트하기] - - \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/start.jsp b/src/main/webapp/WEB-INF/views/start.jsp deleted file mode 100644 index ca46a723..00000000 --- a/src/main/webapp/WEB-INF/views/start.jsp +++ /dev/null @@ -1,93 +0,0 @@ -<%@ page contentType="text/html;charset=UTF-8" language="java" %> - - - KMC 본인인증 시작 - - - - - - -

KMC 본인인증 서비스 테스트

- -
- - - - <%-- KMC 개발 가이드에 따라 tr_add 등의 추가 파라미터가 필요하면 여기에 추가합니다. [cite: 77] --%> - <%-- --%> - -
- -
-
- -

버튼 클릭 시 KMC 본인인증 서비스 팝업이 뜨거나 페이지가 전환됩니다.

-

반드시 "암호화된_데이터"와 "결과받을_URL"을 실제 값으로 채워 넣어야 합니다.

- - \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/step1.jsp b/src/main/webapp/WEB-INF/views/step1.jsp deleted file mode 100644 index b7542152..00000000 --- a/src/main/webapp/WEB-INF/views/step1.jsp +++ /dev/null @@ -1,140 +0,0 @@ -<% - //************************************************************************ - // // - // üҽ ׽Ʈ , // - // // - // 񽺿 ״ ϴ մϴ. // - // // - //************************************************************************ -%> -<% - response.setHeader("Pragma", "no-cache"); // HTTP1.0 ij - response.setDateHeader("Expires", 0); // proxy ij - response.setHeader("Pragma", "no-store"); // HTTP1.1 ij - if (request.getProtocol().equals("HTTP/1.1")) { - response.setHeader("Cache-Control", "no-cache"); // HTTP1.1 ij - } -%> -<%@ page contentType="text/html;charset=ksc5601" %> -<%@ page import="java.util.*,java.text.SimpleDateFormat" %> -<% - //¥ - Calendar today = Calendar.getInstance(); - SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); - String day = sdf.format(today.getTime()); - - java.security.SecureRandom ran = new java.security.SecureRandom(); // SecureRandom Ŭ - ran.setSeed(System.currentTimeMillis()); // õ尪 - - // 100000 ̻ 999999 6ڸ - int randomNum = ran.nextInt(900000) + 100000; - - //reqNum ִ 40byte - String reqNum = day + randomNum; -%> - - - ׽Ʈ - - - - - -
-


- ׽Ʈ
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ID -
URLڵ -
ûȣ
ûϽ
- -
߰DATA
URL
-

- -
-
-
- Sampleȭ ׽Ʈ ϰ ִ ȭԴϴ.
-
-
- - \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/step2.jsp b/src/main/webapp/WEB-INF/views/step2.jsp deleted file mode 100644 index fce5dd62..00000000 --- a/src/main/webapp/WEB-INF/views/step2.jsp +++ /dev/null @@ -1,47 +0,0 @@ -<%@ page contentType="text/html;charset=UTF-8" language="java" %> - - - KMC 본인인증 요청 - - - - -

아래 버튼을 눌러 본인인증을 진행해주세요.

- -
- - - - - <%-- 버튼 클릭 시 submitKmcForm() 스크립트가 실행됩니다. --%> - -
- - From c7cf3891e07c06ddb9074b378434bab68ac55b3a Mon Sep 17 00:00:00 2001 From: wlgns12370 Date: Thu, 7 Aug 2025 12:25:04 +0900 Subject: [PATCH 07/11] =?UTF-8?q?MOSU=20fix:=20=EA=B3=84=EC=A0=95=EC=83=9D?= =?UTF-8?q?=EC=84=B1=20API=20=EC=97=B0=EB=8F=99=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EB=A1=9C=EC=A7=81=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mosuserver/global/filter/Whitelist.java | 7 +- .../presentation/auth/MasterController.java | 77 ------------------- 2 files changed, 2 insertions(+), 82 deletions(-) delete mode 100644 src/main/java/life/mosu/mosuserver/presentation/auth/MasterController.java diff --git a/src/main/java/life/mosu/mosuserver/global/filter/Whitelist.java b/src/main/java/life/mosu/mosuserver/global/filter/Whitelist.java index df4ac672..21da8a79 100644 --- a/src/main/java/life/mosu/mosuserver/global/filter/Whitelist.java +++ b/src/main/java/life/mosu/mosuserver/global/filter/Whitelist.java @@ -21,6 +21,7 @@ public enum Whitelist { SWAGGER_UI("/api/v1/swagger-ui", WhitelistMethod.ALL), VIRTUAL_ACCOUNT("/api/v1/virtual-account", WhitelistMethod.ALL), ADMISSION_TICKET("/api/v1/admission-ticket", WhitelistMethod.ALL), + APPLICATION_GUEST("/api/v1/applications/guest", WhitelistMethod.ALL), // 정적 리소스 CSS("/api/v1/css", WhitelistMethod.GET), @@ -32,15 +33,11 @@ public enum Whitelist { OAUTH2("/api/v1/oauth2", WhitelistMethod.ALL), OAUTH("/api/v1/oauth", WhitelistMethod.ALL), - // 삭제 예정 - MASTER("/api/v1/master", WhitelistMethod.ALL), - // 조회만 가능한 PATH EVENT("/api/v1/event", WhitelistMethod.GET), FAQ("/api/v1/faq", WhitelistMethod.GET), - NOTICE("/api/v1/notice", WhitelistMethod.GET), + NOTICE("/api/v1/notice", WhitelistMethod.GET); - APPLICATION_GUEST("/api/v1/applications/guest", WhitelistMethod.ALL); private final String path; private final WhitelistMethod method; diff --git a/src/main/java/life/mosu/mosuserver/presentation/auth/MasterController.java b/src/main/java/life/mosu/mosuserver/presentation/auth/MasterController.java deleted file mode 100644 index 66e3a5a1..00000000 --- a/src/main/java/life/mosu/mosuserver/presentation/auth/MasterController.java +++ /dev/null @@ -1,77 +0,0 @@ -package life.mosu.mosuserver.presentation.auth; - -import jakarta.validation.Valid; -import java.util.UUID; -import life.mosu.mosuserver.application.auth.SignUpService; -import life.mosu.mosuserver.application.auth.kmc.KmcEventTxService; -import life.mosu.mosuserver.application.auth.provider.OneTimeTokenProvider; -import life.mosu.mosuserver.global.util.ApiResponseWrapper; -import life.mosu.mosuserver.global.util.CookieBuilderUtil; -import life.mosu.mosuserver.infra.kmc.property.KmcProperties; -import life.mosu.mosuserver.presentation.auth.dto.SignUpAccountRequest; -import life.mosu.mosuserver.presentation.auth.dto.Token; -import lombok.RequiredArgsConstructor; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RestController; - -@RestController -@RequiredArgsConstructor -public class MasterController { - - private final static String ACCESS_TOKEN_COOKIE_NAME = "accessToken"; - private final static String REFRESH_TOKEN_COOKIE_NAME = "refreshToken"; - - private final SignUpService signUpService; - private final KmcProperties kmcProperties; - private final KmcEventTxService eventTxService; - private final OneTimeTokenProvider tokenProvider; - - @PostMapping("/master") - public ResponseEntity> masterSignUp( - @RequestBody @Valid SignUpAccountRequest request - ) { - Token token = signUpService.signUp(request); - - return ResponseEntity.status(HttpStatus.CREATED) - .headers(applyTokenHeader(token)) - .body(ApiResponseWrapper.success(HttpStatus.CREATED, "회원가입 성공")); - } - -// @GetMapping("/master/kmc") -// public ResponseEntity> kmcSignUp( -// ) { -// final String certNum = UUID.randomUUID().toString().replace("-", ""); -// String token = tokenProvider.generateOneTimeToken(certNum,); -// try { -// eventTxService.publishIssueEvent(certNum, kmcProperties.getExpireTime()); -// -// -// } catch (Exception ex) { -// eventTxService.publishFailureEvent(certNum); -// throw new RuntimeException("KMC 인증 요청 생성에 실패했습니다.", ex); -// } -// -// return ResponseEntity.ok(ApiResponseWrapper.success(HttpStatus.OK, "프로필 등록 성공", token)); -// } - - private HttpHeaders applyTokenHeader(Token token) { - HttpHeaders headers = new HttpHeaders(); - - headers.add(HttpHeaders.SET_COOKIE, CookieBuilderUtil.createLocalCookieString( - ACCESS_TOKEN_COOKIE_NAME, - token.accessToken(), - token.accessTokenExpireTime() - )); - headers.add(HttpHeaders.SET_COOKIE, CookieBuilderUtil.createLocalCookieString( - REFRESH_TOKEN_COOKIE_NAME, - token.refreshToken(), - token.refreshTokenExpireTime() - )); - return headers; - } -} \ No newline at end of file From 495fbff9ce00e332874d6056c1e3278683a22528 Mon Sep 17 00:00:00 2001 From: wlgns12370 Date: Thu, 7 Aug 2025 12:25:29 +0900 Subject: [PATCH 08/11] =?UTF-8?q?MOSU=20fix:=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20init=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../initializer/DatabaseInitializer.java | 275 ------------------ 1 file changed, 275 deletions(-) diff --git a/src/main/java/life/mosu/mosuserver/global/initializer/DatabaseInitializer.java b/src/main/java/life/mosu/mosuserver/global/initializer/DatabaseInitializer.java index 844341f7..7e35ee7a 100644 --- a/src/main/java/life/mosu/mosuserver/global/initializer/DatabaseInitializer.java +++ b/src/main/java/life/mosu/mosuserver/global/initializer/DatabaseInitializer.java @@ -2,54 +2,15 @@ import jakarta.annotation.PostConstruct; import java.time.LocalDate; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashSet; import java.util.List; import java.util.Random; -import java.util.Set; -import java.util.UUID; -import life.mosu.mosuserver.domain.application.entity.ApplicationJpaEntity; -import life.mosu.mosuserver.domain.application.entity.Subject; -import life.mosu.mosuserver.domain.application.repository.ApplicationJpaRepository; -import life.mosu.mosuserver.domain.event.repository.EventJpaRepository; import life.mosu.mosuserver.domain.exam.entity.AddressJpaVO; import life.mosu.mosuserver.domain.exam.entity.Area; import life.mosu.mosuserver.domain.exam.entity.ExamJpaEntity; import life.mosu.mosuserver.domain.exam.entity.ExamJpaRepository; -import life.mosu.mosuserver.domain.examapplication.entity.ExamApplicationJpaEntity; -import life.mosu.mosuserver.domain.examapplication.entity.ExamSubjectJpaEntity; -import life.mosu.mosuserver.domain.examapplication.repository.ExamApplicationJpaRepository; -import life.mosu.mosuserver.domain.examapplication.repository.ExamSubjectJpaRepository; -import life.mosu.mosuserver.domain.inquiry.entity.InquiryJpaEntity; -import life.mosu.mosuserver.domain.inquiry.repository.InquiryJpaRepository; -import life.mosu.mosuserver.domain.inquiryAnswer.entity.InquiryAnswerJpaEntity; -import life.mosu.mosuserver.domain.inquiryAnswer.repository.InquiryAnswerJpaRepository; -import life.mosu.mosuserver.domain.notice.entity.NoticeJpaEntity; -import life.mosu.mosuserver.domain.notice.repository.NoticeJpaRepository; -import life.mosu.mosuserver.domain.payment.entity.PaymentAmountVO; -import life.mosu.mosuserver.domain.payment.entity.PaymentJpaEntity; -import life.mosu.mosuserver.domain.payment.entity.PaymentMethod; -import life.mosu.mosuserver.domain.payment.entity.PaymentStatus; -import life.mosu.mosuserver.domain.payment.repository.PaymentJpaRepository; -import life.mosu.mosuserver.domain.profile.entity.Education; -import life.mosu.mosuserver.domain.profile.entity.Gender; -import life.mosu.mosuserver.domain.profile.entity.Grade; -import life.mosu.mosuserver.domain.profile.entity.ProfileJpaEntity; -import life.mosu.mosuserver.domain.profile.entity.SchoolInfoJpaVO; -import life.mosu.mosuserver.domain.profile.repository.ProfileJpaRepository; -import life.mosu.mosuserver.domain.recommendation.RecommendationJpaEntity; -import life.mosu.mosuserver.domain.recommendation.RecommendationJpaRepository; -import life.mosu.mosuserver.domain.refund.entity.RefundJpaEntity; -import life.mosu.mosuserver.domain.refund.entity.RefundStatus; -import life.mosu.mosuserver.domain.refund.repository.RefundJpaRepository; -import life.mosu.mosuserver.domain.user.entity.AuthProvider; -import life.mosu.mosuserver.domain.user.entity.UserJpaEntity; -import life.mosu.mosuserver.domain.user.entity.UserRole; import life.mosu.mosuserver.domain.user.repository.UserJpaRepository; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Component; @Slf4j @@ -61,19 +22,7 @@ public class DatabaseInitializer { private static final int LUNCH_PRICE = 9_000; private final UserJpaRepository userRepository; - private final ProfileJpaRepository profileRepository; private final ExamJpaRepository examRepository; - private final ApplicationJpaRepository applicationRepository; - private final ExamApplicationJpaRepository examApplicationRepository; - private final ExamSubjectJpaRepository examSubjectRepository; - private final PaymentJpaRepository paymentRepository; - private final NoticeJpaRepository noticeRepository; - private final InquiryJpaRepository inquiryRepository; - private final InquiryAnswerJpaRepository inquiryAnswerRepository; - private final RefundJpaRepository refundRepository; - private final EventJpaRepository eventRepository; - private final PasswordEncoder passwordEncoder; - private final RecommendationJpaRepository recommendationRepository; @PostConstruct public void init() { @@ -81,89 +30,8 @@ public void init() { log.info("이미 더미 데이터가 존재하여 초기화를 건너뜁니다."); return; } - - log.info("데이터 초기화 시작 🚀"); Random random = new Random(); - - List users = createUsersAndProfiles(random); List exams = createExams(); - createApplicationsAndPayments(users, exams, random); - createBoardItems(users, random); - createRefunds(); - createRecommendations(); - - log.info("✅ 데이터 초기화 완료"); - } - - private List createUsersAndProfiles(Random random) { - List users = new ArrayList<>(); - - for (int i = 1; i <= 10; i++) { - UserJpaEntity user = UserJpaEntity.builder() - .loginId("userid" + i) - .password(passwordEncoder.encode("Password!" + i)) - .gender(i % 2 == 0 ? Gender.MALE : Gender.FEMALE) - .name("모수학생" + i) - .phoneNumber("010-9161-2960") - .birth(LocalDate.of(2005 + i % 3, (i % 12) + 1, (i % 28) + 1)) - .userRole(i == 1 ? UserRole.ROLE_ADMIN : UserRole.ROLE_USER) - .agreedToTermsOfService(true) - .agreedToPrivacyPolicy(true) - .agreedToMarketing(random.nextBoolean()) - .provider(AuthProvider.MOSU) - .build(); - userRepository.save(user); - users.add(user); - - ProfileJpaEntity profile = ProfileJpaEntity.builder() - .userId(user.getId()) - .userName(user.getName()) - .gender(user.getGender()) - .birth(user.getBirth()) - .phoneNumber(user.getPhoneNumber()) - .email("user" + i + "@mosu.life") - .education(Education.ENROLLED) - .schoolInfo(new SchoolInfoJpaVO("모수고등학교", "서울시 모수구 123", "12345")) - .grade(Grade.values()[random.nextInt(Grade.values().length)]) - .build(); - profileRepository.save(profile); - } - - createAdditionalUsers(); - - return users; - } - - private void createAdditionalUsers() { - for (int i = 11; i <= 12; i++) { - UserJpaEntity user = UserJpaEntity.builder() - .loginId("userid" + i) - .password(passwordEncoder.encode("Password!" + i)) - .gender(i % 2 == 0 ? Gender.MALE : Gender.FEMALE) - .name("홍길동") - .phoneNumber("010-5048-6201") - .birth(LocalDate.of(2005 + i % 3, (i % 12) + 1, (i % 28) + 1)) - .userRole(UserRole.ROLE_USER) - .agreedToTermsOfService(true) - .agreedToPrivacyPolicy(true) - .agreedToMarketing(true) - .provider(AuthProvider.MOSU) - .build(); - userRepository.save(user); - - ProfileJpaEntity profile = ProfileJpaEntity.builder() - .userId(user.getId()) - .userName(user.getName()) - .gender(user.getGender()) - .birth(user.getBirth()) - .phoneNumber(user.getPhoneNumber()) - .email("user" + i + "@mosu.life") - .education(Education.ENROLLED) - .schoolInfo(new SchoolInfoJpaVO("모수고등학교", "서울시 모수구 123", "12345")) - .grade(Grade.HIGH_1) - .build(); - profileRepository.save(profile); - } } private List createExams() { @@ -212,147 +80,4 @@ private ExamJpaEntity createExam(String name, Area area, String zipcode, String .lunchPrice(LUNCH_PRICE) .build(); } - - private void createApplicationsAndPayments(List users, List exams, - Random random) { - int counter = 0; - - for (UserJpaEntity user : users) { - ApplicationJpaEntity application = applicationRepository.save( - ApplicationJpaEntity.builder() - .userId(user.getId()) - .parentPhoneNumber("010-9876-" + String.format("%04d", user.getId())) - .agreedToNotices(true) - .agreedToRefundPolicy(true) - .build() - ); - - Collections.shuffle(exams); - int applyCount = random.nextInt(3) + 1; - List applied = new ArrayList<>(); - int lunchCount = 0; - - for (int i = 0; i < applyCount; i++) { - ExamJpaEntity exam = exams.get(i); - boolean lunch = random.nextBoolean(); - if (lunch) { - lunchCount++; - } - - ExamApplicationJpaEntity examApp = examApplicationRepository.save( - ExamApplicationJpaEntity.create( - application.getId(), - user.getId(), - exam.getId(), - lunch - ) - ); - applied.add(examApp); - } - - for (ExamApplicationJpaEntity app : applied) { - Set subjects = new HashSet<>(); - while (subjects.size() < (random.nextBoolean() ? 2 : 1)) { - subjects.add(Subject.values()[random.nextInt(Subject.values().length)]); - } - subjects.forEach(subject -> examSubjectRepository.save( - new ExamSubjectJpaEntity(app.getId(), subject))); - } - - int baseTotal = switch (applyCount) { - case 1 -> 49_000; - case 2 -> 89_000; - case 3 -> 129_000; - default -> applyCount * BASE_EXAM_FEE; - }; - int total = baseTotal + (lunchCount * LUNCH_PRICE); - - for (ExamApplicationJpaEntity app : applied) { - paymentRepository.save(PaymentJpaEntity.of( - app.getId(), - application.getId(), - "pkey-" + UUID.randomUUID(), - "order-" + UUID.randomUUID().toString().substring(0, 12), - PaymentStatus.DONE, - PaymentAmountVO.of(total, total, total, 0, 0), - PaymentMethod.CARD - )); - counter++; - } - } - } - - private void createBoardItems(List users, Random random) { - UserJpaEntity admin = users.stream().filter(u -> u.getUserRole() == UserRole.ROLE_ADMIN) - .findFirst().orElse(users.get(0)); - - for (int i = 1; i <= 100; i++) { - noticeRepository.save(NoticeJpaEntity.builder() - .title("공지사항 " + i) - .content("제 " + i + "회 모의고사 공지") - .userId(admin.getId()) - .author(admin.getName()) - .build()); - - InquiryJpaEntity inquiry = inquiryRepository.save(InquiryJpaEntity.builder() - .title("문의합니다 " + i) - .content("내용입니다 " + i) - .userId(admin.getId()) - .author(admin.getName()) - .build()); - - if (random.nextBoolean()) { - inquiryAnswerRepository.save(InquiryAnswerJpaEntity.builder() - .title("Re: 문의합니다 " + i) - .content("답변드립니다.") - .inquiryId(inquiry.getId()) - .userId(admin.getId()) - .build()); - inquiry.updateStatusToComplete(); - inquiryRepository.save(inquiry); - } - -// eventRepository.save(EventJpaEntity.builder() -// .title("이벤트 " + i) -// .duration(new DurationJpaVO(LocalDate.now().plusDays(i), -// LocalDate.now().plusDays(i + 5))) -// .eventLink("https://mosu.life/event/" + i) -// .build()); - } - } - - private void createRefunds() { - List all = examApplicationRepository.findAll(); - for (ExamApplicationJpaEntity app : all) { - if (Math.random() < 0.3) { - refundRepository.save(RefundJpaEntity.of( - app.getId(), - "tranaction-key", - "단순 변심", - RefundStatus.DONE, - 49000, - 49000 - )); - } - } - } - - private void createRecommendations() { - recommendationRepository.saveAll(List.of( - RecommendationJpaEntity.builder() - .userId(1L) - .name("홍길동") - .phoneNumber("010-1234-5678") - .bank("신한") - .accountNumber("110-123-456789") - .build(), - RecommendationJpaEntity.builder() - .userId(2L) - .name("김철수") - .phoneNumber("010-9876-5432") - .bank("국민") - .accountNumber("123-456-789012") - .build() - )); - } } From 331f90943a692f56bbd7540b35aad41835318ea8 Mon Sep 17 00:00:00 2001 From: wlgns12370 Date: Thu, 7 Aug 2025 12:30:32 +0900 Subject: [PATCH 09/11] =?UTF-8?q?MOSU=20refactor:=20DTO=20=ED=8C=A8?= =?UTF-8?q?=ED=82=A4=EC=A7=80=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../life/mosu/mosuserver/application/auth/AuthService.java | 4 ++-- .../mosu/mosuserver/application/auth/SignUpService.java | 2 +- .../global/handler/OAuth2LoginSuccessHandler.java | 2 +- .../mosu/mosuserver/presentation/auth/AuthController.java | 6 +++--- .../mosuserver/presentation/auth/AuthControllerDocs.java | 4 ++-- .../mosu/mosuserver/presentation/auth/SignUpController.java | 2 +- .../mosuserver/presentation/auth/SignUpControllerDocs.java | 2 +- .../presentation/auth/dto/{ => request}/LoginRequest.java | 2 +- .../presentation/auth/dto/{ => request}/LoginResponse.java | 3 ++- .../auth/dto/{ => request}/SignUpAccountRequest.java | 2 +- .../presentation/auth/dto/{ => request}/SignUpRequest.java | 2 +- .../auth/dto/{ => request}/SignUpServiceTermRequest.java | 2 +- .../auth/dto/{ => response}/LoginCommandResponse.java | 3 ++- .../auth/dto/{ => response}/LoginUserResponse.java | 2 +- .../auth/dto/{ => response}/SignUpResponse.java | 4 +++- .../mosuserver/presentation/auth/dto/LoginResponseTest.java | 1 + 16 files changed, 24 insertions(+), 19 deletions(-) rename src/main/java/life/mosu/mosuserver/presentation/auth/dto/{ => request}/LoginRequest.java (90%) rename src/main/java/life/mosu/mosuserver/presentation/auth/dto/{ => request}/LoginResponse.java (85%) rename src/main/java/life/mosu/mosuserver/presentation/auth/dto/{ => request}/SignUpAccountRequest.java (97%) rename src/main/java/life/mosu/mosuserver/presentation/auth/dto/{ => request}/SignUpRequest.java (88%) rename src/main/java/life/mosu/mosuserver/presentation/auth/dto/{ => request}/SignUpServiceTermRequest.java (91%) rename src/main/java/life/mosu/mosuserver/presentation/auth/dto/{ => response}/LoginCommandResponse.java (77%) rename src/main/java/life/mosu/mosuserver/presentation/auth/dto/{ => response}/LoginUserResponse.java (93%) rename src/main/java/life/mosu/mosuserver/presentation/auth/dto/{ => response}/SignUpResponse.java (57%) diff --git a/src/main/java/life/mosu/mosuserver/application/auth/AuthService.java b/src/main/java/life/mosu/mosuserver/application/auth/AuthService.java index 4221181b..ad06742c 100644 --- a/src/main/java/life/mosu/mosuserver/application/auth/AuthService.java +++ b/src/main/java/life/mosu/mosuserver/application/auth/AuthService.java @@ -7,8 +7,8 @@ import life.mosu.mosuserver.domain.user.entity.UserRole; import life.mosu.mosuserver.global.exception.CustomRuntimeException; import life.mosu.mosuserver.global.exception.ErrorCode; -import life.mosu.mosuserver.presentation.auth.dto.LoginCommandResponse; -import life.mosu.mosuserver.presentation.auth.dto.LoginRequest; +import life.mosu.mosuserver.presentation.auth.dto.request.LoginRequest; +import life.mosu.mosuserver.presentation.auth.dto.response.LoginCommandResponse; import lombok.RequiredArgsConstructor; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; diff --git a/src/main/java/life/mosu/mosuserver/application/auth/SignUpService.java b/src/main/java/life/mosu/mosuserver/application/auth/SignUpService.java index 42cfe6ab..480508ab 100644 --- a/src/main/java/life/mosu/mosuserver/application/auth/SignUpService.java +++ b/src/main/java/life/mosu/mosuserver/application/auth/SignUpService.java @@ -3,8 +3,8 @@ import life.mosu.mosuserver.application.auth.processor.SignUpAccountStepProcessor; import life.mosu.mosuserver.application.auth.provider.AuthTokenManager; import life.mosu.mosuserver.domain.user.entity.UserJpaEntity; -import life.mosu.mosuserver.presentation.auth.dto.SignUpAccountRequest; import life.mosu.mosuserver.presentation.auth.dto.Token; +import life.mosu.mosuserver.presentation.auth.dto.request.SignUpAccountRequest; import lombok.RequiredArgsConstructor; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; diff --git a/src/main/java/life/mosu/mosuserver/global/handler/OAuth2LoginSuccessHandler.java b/src/main/java/life/mosu/mosuserver/global/handler/OAuth2LoginSuccessHandler.java index 2c4449ba..420f4014 100644 --- a/src/main/java/life/mosu/mosuserver/global/handler/OAuth2LoginSuccessHandler.java +++ b/src/main/java/life/mosu/mosuserver/global/handler/OAuth2LoginSuccessHandler.java @@ -12,8 +12,8 @@ import life.mosu.mosuserver.application.auth.provider.AuthTokenManager; import life.mosu.mosuserver.application.oauth.OAuthUser; import life.mosu.mosuserver.global.util.CookieBuilderUtil; -import life.mosu.mosuserver.presentation.auth.dto.LoginResponse; import life.mosu.mosuserver.presentation.auth.dto.Token; +import life.mosu.mosuserver.presentation.auth.dto.request.LoginResponse; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpHeaders; import org.springframework.http.ResponseCookie; diff --git a/src/main/java/life/mosu/mosuserver/presentation/auth/AuthController.java b/src/main/java/life/mosu/mosuserver/presentation/auth/AuthController.java index 08030dd0..a75acc3a 100644 --- a/src/main/java/life/mosu/mosuserver/presentation/auth/AuthController.java +++ b/src/main/java/life/mosu/mosuserver/presentation/auth/AuthController.java @@ -4,10 +4,10 @@ import life.mosu.mosuserver.application.auth.AuthService; import life.mosu.mosuserver.global.util.ApiResponseWrapper; import life.mosu.mosuserver.global.util.CookieBuilderUtil; -import life.mosu.mosuserver.presentation.auth.dto.LoginCommandResponse; -import life.mosu.mosuserver.presentation.auth.dto.LoginRequest; -import life.mosu.mosuserver.presentation.auth.dto.LoginResponse; import life.mosu.mosuserver.presentation.auth.dto.Token; +import life.mosu.mosuserver.presentation.auth.dto.request.LoginRequest; +import life.mosu.mosuserver.presentation.auth.dto.request.LoginResponse; +import life.mosu.mosuserver.presentation.auth.dto.response.LoginCommandResponse; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; diff --git a/src/main/java/life/mosu/mosuserver/presentation/auth/AuthControllerDocs.java b/src/main/java/life/mosu/mosuserver/presentation/auth/AuthControllerDocs.java index 93409174..59024185 100644 --- a/src/main/java/life/mosu/mosuserver/presentation/auth/AuthControllerDocs.java +++ b/src/main/java/life/mosu/mosuserver/presentation/auth/AuthControllerDocs.java @@ -4,8 +4,8 @@ import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; import life.mosu.mosuserver.global.util.ApiResponseWrapper; -import life.mosu.mosuserver.presentation.auth.dto.LoginRequest; -import life.mosu.mosuserver.presentation.auth.dto.LoginResponse; +import life.mosu.mosuserver.presentation.auth.dto.request.LoginRequest; +import life.mosu.mosuserver.presentation.auth.dto.request.LoginResponse; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.RequestBody; diff --git a/src/main/java/life/mosu/mosuserver/presentation/auth/SignUpController.java b/src/main/java/life/mosu/mosuserver/presentation/auth/SignUpController.java index dbb723f2..58c04fa6 100644 --- a/src/main/java/life/mosu/mosuserver/presentation/auth/SignUpController.java +++ b/src/main/java/life/mosu/mosuserver/presentation/auth/SignUpController.java @@ -4,8 +4,8 @@ import life.mosu.mosuserver.application.auth.SignUpService; import life.mosu.mosuserver.global.util.ApiResponseWrapper; import life.mosu.mosuserver.global.util.CookieBuilderUtil; -import life.mosu.mosuserver.presentation.auth.dto.SignUpAccountRequest; import life.mosu.mosuserver.presentation.auth.dto.Token; +import life.mosu.mosuserver.presentation.auth.dto.request.SignUpAccountRequest; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; diff --git a/src/main/java/life/mosu/mosuserver/presentation/auth/SignUpControllerDocs.java b/src/main/java/life/mosu/mosuserver/presentation/auth/SignUpControllerDocs.java index 81bc8875..11ace650 100644 --- a/src/main/java/life/mosu/mosuserver/presentation/auth/SignUpControllerDocs.java +++ b/src/main/java/life/mosu/mosuserver/presentation/auth/SignUpControllerDocs.java @@ -4,7 +4,7 @@ import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; import life.mosu.mosuserver.global.util.ApiResponseWrapper; -import life.mosu.mosuserver.presentation.auth.dto.SignUpAccountRequest; +import life.mosu.mosuserver.presentation.auth.dto.request.SignUpAccountRequest; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.RequestBody; diff --git a/src/main/java/life/mosu/mosuserver/presentation/auth/dto/LoginRequest.java b/src/main/java/life/mosu/mosuserver/presentation/auth/dto/request/LoginRequest.java similarity index 90% rename from src/main/java/life/mosu/mosuserver/presentation/auth/dto/LoginRequest.java rename to src/main/java/life/mosu/mosuserver/presentation/auth/dto/request/LoginRequest.java index 03c94231..41329a61 100644 --- a/src/main/java/life/mosu/mosuserver/presentation/auth/dto/LoginRequest.java +++ b/src/main/java/life/mosu/mosuserver/presentation/auth/dto/request/LoginRequest.java @@ -1,4 +1,4 @@ -package life.mosu.mosuserver.presentation.auth.dto; +package life.mosu.mosuserver.presentation.auth.dto.request; import io.swagger.v3.oas.annotations.media.Schema; import life.mosu.mosuserver.global.annotation.LoginIdPattern; diff --git a/src/main/java/life/mosu/mosuserver/presentation/auth/dto/LoginResponse.java b/src/main/java/life/mosu/mosuserver/presentation/auth/dto/request/LoginResponse.java similarity index 85% rename from src/main/java/life/mosu/mosuserver/presentation/auth/dto/LoginResponse.java rename to src/main/java/life/mosu/mosuserver/presentation/auth/dto/request/LoginResponse.java index 972c0cfb..4f9f35ef 100644 --- a/src/main/java/life/mosu/mosuserver/presentation/auth/dto/LoginResponse.java +++ b/src/main/java/life/mosu/mosuserver/presentation/auth/dto/request/LoginResponse.java @@ -1,9 +1,10 @@ -package life.mosu.mosuserver.presentation.auth.dto; +package life.mosu.mosuserver.presentation.auth.dto.request; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; import life.mosu.mosuserver.application.oauth.OAuthUser; import life.mosu.mosuserver.domain.user.entity.UserJpaEntity; +import life.mosu.mosuserver.presentation.auth.dto.response.LoginUserResponse; public record LoginResponse( Boolean isProfileRegistered, diff --git a/src/main/java/life/mosu/mosuserver/presentation/auth/dto/SignUpAccountRequest.java b/src/main/java/life/mosu/mosuserver/presentation/auth/dto/request/SignUpAccountRequest.java similarity index 97% rename from src/main/java/life/mosu/mosuserver/presentation/auth/dto/SignUpAccountRequest.java rename to src/main/java/life/mosu/mosuserver/presentation/auth/dto/request/SignUpAccountRequest.java index 4df6b88c..b4ae1690 100644 --- a/src/main/java/life/mosu/mosuserver/presentation/auth/dto/SignUpAccountRequest.java +++ b/src/main/java/life/mosu/mosuserver/presentation/auth/dto/request/SignUpAccountRequest.java @@ -1,4 +1,4 @@ -package life.mosu.mosuserver.presentation.auth.dto; +package life.mosu.mosuserver.presentation.auth.dto.request; import static life.mosu.mosuserver.global.util.EncodeUtil.passwordEncode; diff --git a/src/main/java/life/mosu/mosuserver/presentation/auth/dto/SignUpRequest.java b/src/main/java/life/mosu/mosuserver/presentation/auth/dto/request/SignUpRequest.java similarity index 88% rename from src/main/java/life/mosu/mosuserver/presentation/auth/dto/SignUpRequest.java rename to src/main/java/life/mosu/mosuserver/presentation/auth/dto/request/SignUpRequest.java index e6909f06..b877375e 100644 --- a/src/main/java/life/mosu/mosuserver/presentation/auth/dto/SignUpRequest.java +++ b/src/main/java/life/mosu/mosuserver/presentation/auth/dto/request/SignUpRequest.java @@ -1,4 +1,4 @@ -package life.mosu.mosuserver.presentation.auth.dto; +package life.mosu.mosuserver.presentation.auth.dto.request; import io.swagger.v3.oas.annotations.media.Schema; import life.mosu.mosuserver.presentation.profile.dto.SignUpProfileRequest; diff --git a/src/main/java/life/mosu/mosuserver/presentation/auth/dto/SignUpServiceTermRequest.java b/src/main/java/life/mosu/mosuserver/presentation/auth/dto/request/SignUpServiceTermRequest.java similarity index 91% rename from src/main/java/life/mosu/mosuserver/presentation/auth/dto/SignUpServiceTermRequest.java rename to src/main/java/life/mosu/mosuserver/presentation/auth/dto/request/SignUpServiceTermRequest.java index e96a84c0..8ef520b9 100644 --- a/src/main/java/life/mosu/mosuserver/presentation/auth/dto/SignUpServiceTermRequest.java +++ b/src/main/java/life/mosu/mosuserver/presentation/auth/dto/request/SignUpServiceTermRequest.java @@ -1,4 +1,4 @@ -package life.mosu.mosuserver.presentation.auth.dto; +package life.mosu.mosuserver.presentation.auth.dto.request; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/src/main/java/life/mosu/mosuserver/presentation/auth/dto/LoginCommandResponse.java b/src/main/java/life/mosu/mosuserver/presentation/auth/dto/response/LoginCommandResponse.java similarity index 77% rename from src/main/java/life/mosu/mosuserver/presentation/auth/dto/LoginCommandResponse.java rename to src/main/java/life/mosu/mosuserver/presentation/auth/dto/response/LoginCommandResponse.java index 6b33a1a3..d44c528e 100644 --- a/src/main/java/life/mosu/mosuserver/presentation/auth/dto/LoginCommandResponse.java +++ b/src/main/java/life/mosu/mosuserver/presentation/auth/dto/response/LoginCommandResponse.java @@ -1,6 +1,7 @@ -package life.mosu.mosuserver.presentation.auth.dto; +package life.mosu.mosuserver.presentation.auth.dto.response; import life.mosu.mosuserver.domain.user.entity.UserJpaEntity; +import life.mosu.mosuserver.presentation.auth.dto.Token; public record LoginCommandResponse( Token token, diff --git a/src/main/java/life/mosu/mosuserver/presentation/auth/dto/LoginUserResponse.java b/src/main/java/life/mosu/mosuserver/presentation/auth/dto/response/LoginUserResponse.java similarity index 93% rename from src/main/java/life/mosu/mosuserver/presentation/auth/dto/LoginUserResponse.java rename to src/main/java/life/mosu/mosuserver/presentation/auth/dto/response/LoginUserResponse.java index f43a7aa1..44d37a6c 100644 --- a/src/main/java/life/mosu/mosuserver/presentation/auth/dto/LoginUserResponse.java +++ b/src/main/java/life/mosu/mosuserver/presentation/auth/dto/response/LoginUserResponse.java @@ -1,4 +1,4 @@ -package life.mosu.mosuserver.presentation.auth.dto; +package life.mosu.mosuserver.presentation.auth.dto.response; import java.time.LocalDate; import java.util.Optional; diff --git a/src/main/java/life/mosu/mosuserver/presentation/auth/dto/SignUpResponse.java b/src/main/java/life/mosu/mosuserver/presentation/auth/dto/response/SignUpResponse.java similarity index 57% rename from src/main/java/life/mosu/mosuserver/presentation/auth/dto/SignUpResponse.java rename to src/main/java/life/mosu/mosuserver/presentation/auth/dto/response/SignUpResponse.java index bc554ab6..2809660c 100644 --- a/src/main/java/life/mosu/mosuserver/presentation/auth/dto/SignUpResponse.java +++ b/src/main/java/life/mosu/mosuserver/presentation/auth/dto/response/SignUpResponse.java @@ -1,4 +1,6 @@ -package life.mosu.mosuserver.presentation.auth.dto; +package life.mosu.mosuserver.presentation.auth.dto.response; + +import life.mosu.mosuserver.presentation.auth.dto.Token; public record SignUpResponse( Token token diff --git a/src/test/java/life/mosu/mosuserver/presentation/auth/dto/LoginResponseTest.java b/src/test/java/life/mosu/mosuserver/presentation/auth/dto/LoginResponseTest.java index 20a38723..d96564dc 100644 --- a/src/test/java/life/mosu/mosuserver/presentation/auth/dto/LoginResponseTest.java +++ b/src/test/java/life/mosu/mosuserver/presentation/auth/dto/LoginResponseTest.java @@ -15,6 +15,7 @@ import life.mosu.mosuserver.domain.user.entity.AuthProvider; import life.mosu.mosuserver.domain.user.entity.UserJpaEntity; import life.mosu.mosuserver.domain.user.entity.UserRole; +import life.mosu.mosuserver.presentation.auth.dto.request.LoginResponse; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; From f39e3de3b3e5f98f30ad0c5475714e2cba16cd24 Mon Sep 17 00:00:00 2001 From: wlgns12370 Date: Thu, 7 Aug 2025 12:52:52 +0900 Subject: [PATCH 10/11] =?UTF-8?q?MOSU=20fix:=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20CORS=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mosuserver/global/config/SecurityConfig.java | 8 -------- .../mosuserver/global/config/WebMvcConfig.java | 16 +++------------- 2 files changed, 3 insertions(+), 21 deletions(-) diff --git a/src/main/java/life/mosu/mosuserver/global/config/SecurityConfig.java b/src/main/java/life/mosu/mosuserver/global/config/SecurityConfig.java index 2122e883..c6c9f251 100644 --- a/src/main/java/life/mosu/mosuserver/global/config/SecurityConfig.java +++ b/src/main/java/life/mosu/mosuserver/global/config/SecurityConfig.java @@ -47,18 +47,10 @@ public class SecurityConfig { public static final List clients = List.of( "http://localhost:3000", - "http://localhost:8080", "https://mosuedu.com", - "http://api.mosuedu.com", "https://api.mosuedu.com", "https://www.mosuedu.com", - "http://www.mosuedu.com:3000", - "https://test.mosuedu.com", - "http://localhost:5173", "https://partnership.mosuedu.com", - "http://dev.mosuedu.com:3000", - "https://dev.mosuedu.com", - "http://admin.mosuedu.com:3000", "https://admin.mosuedu.com" ); private final OAuthUserService userService; diff --git a/src/main/java/life/mosu/mosuserver/global/config/WebMvcConfig.java b/src/main/java/life/mosu/mosuserver/global/config/WebMvcConfig.java index 0a71052d..806d59aa 100644 --- a/src/main/java/life/mosu/mosuserver/global/config/WebMvcConfig.java +++ b/src/main/java/life/mosu/mosuserver/global/config/WebMvcConfig.java @@ -1,16 +1,14 @@ package life.mosu.mosuserver.global.config; import java.util.List; - import life.mosu.mosuserver.global.resolver.PhoneNumberArgumentResolver; +import life.mosu.mosuserver.global.resolver.UserIdArgumentResolver; +import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Configuration; import org.springframework.web.method.support.HandlerMethodArgumentResolver; import org.springframework.web.servlet.config.annotation.CorsRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; -import life.mosu.mosuserver.global.resolver.UserIdArgumentResolver; -import lombok.RequiredArgsConstructor; - @Configuration @RequiredArgsConstructor public class WebMvcConfig implements WebMvcConfigurer { @@ -22,7 +20,6 @@ public class WebMvcConfig implements WebMvcConfigurer { public void addArgumentResolvers(final List resolvers) { resolvers.add(userIdResolver); resolvers.add(phoneNumberResolver); - } @Override @@ -32,17 +29,10 @@ public void addCorsMappings(CorsRegistry registry) { .allowedHeaders("*") .allowedOrigins( "http://localhost:3000", - "http://localhost:8080", - "http://api.mosuedu.com", + "https://mosuedu.com", "https://api.mosuedu.com", "https://www.mosuedu.com", - "http://www.mosuedu.com:3000", - "https://test.mosuedu.com", - "http://localhost:5173", "https://partnership.mosuedu.com", - "http://dev.mosuedu.com:3000", - "https://dev.mosuedu.com", - "http://admin.mosuedu.com:3000", "https://admin.mosuedu.com" ) .allowCredentials(true) From 776f492f3474b01ac9b1eb64b965b1e841c0d083 Mon Sep 17 00:00:00 2001 From: wlgns12370 Date: Thu, 7 Aug 2025 12:53:18 +0900 Subject: [PATCH 11/11] =?UTF-8?q?MOSU=20feat:=20=EC=BF=A0=ED=82=A4=20Stric?= =?UTF-8?q?t=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../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 2502b155..7f5ea9aa 100644 --- a/src/main/java/life/mosu/mosuserver/global/util/CookieBuilderUtil.java +++ b/src/main/java/life/mosu/mosuserver/global/util/CookieBuilderUtil.java @@ -55,7 +55,7 @@ public static String createLocalCookieString(String name, String value, Long max } /** - * [개발 환경용] 크로스-도메인 ResponseCookie 객체를 생성합니다. (Secure=true, SameSite=None) + * [개발 환경용] 크로스-도메인 ResponseCookie 객체를 생성합니다. (Secure=true) * * @param name 쿠키의 이름 * @param value 쿠키에 저장될 값 @@ -67,7 +67,7 @@ public static ResponseCookie createDevelopResponseCookie(String name, String val return createBaseResponseCookieBuilder(name, value, maxAge) .secure(true) .domain(".mosuedu.com") - .sameSite("None") + .sameSite("Strict") .build(); }