From 5330fc6df58afbd7975f0014f8507825339a081c Mon Sep 17 00:00:00 2001 From: teddy Date: Fri, 12 Dec 2025 10:15:32 +0900 Subject: [PATCH 1/4] =?UTF-8?q?=EA=B4=80=EB=A6=AC=EC=9E=90=20=EC=9C=A0?= =?UTF-8?q?=ED=98=95=20=EB=B2=A8=EB=A6=AC=EB=8D=B0=EC=9D=B4=ED=8A=B8=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/kamco/cd/kamcoback/members/dto/MembersDto.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/kamco/cd/kamcoback/members/dto/MembersDto.java b/src/main/java/com/kamco/cd/kamcoback/members/dto/MembersDto.java index 1c777896..f0de1810 100644 --- a/src/main/java/com/kamco/cd/kamcoback/members/dto/MembersDto.java +++ b/src/main/java/com/kamco/cd/kamcoback/members/dto/MembersDto.java @@ -3,6 +3,7 @@ package com.kamco.cd.kamcoback.members.dto; import com.kamco.cd.kamcoback.common.enums.RoleType; import com.kamco.cd.kamcoback.common.enums.StatusType; import com.kamco.cd.kamcoback.common.utils.Enums; +import com.kamco.cd.kamcoback.common.utils.interfaces.EnumValid; import com.kamco.cd.kamcoback.common.utils.interfaces.JsonFormatDttm; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; @@ -107,7 +108,7 @@ public class MembersDto { @Schema(description = "관리자 유형", example = "ADMIN") @NotBlank - @Size(max = 50) + @EnumValid(enumClass = RoleType.class, message = "userRole은 ADMIN, LABELER, REVIEWER만 가능합니다.") private String userRole; @Schema(description = "이름", example = "홍길동") From 1f8eaf49116cc16c6a1883d184750abb179b75a2 Mon Sep 17 00:00:00 2001 From: Moon Date: Fri, 12 Dec 2025 10:27:05 +0900 Subject: [PATCH 2/4] =?UTF-8?q?use=5Finference=20=EC=9E=90=EB=A3=8C?= =?UTF-8?q?=ED=98=95=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cd/kamcoback/postgres/entity/MapSheetMngHstEntity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MapSheetMngHstEntity.java b/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MapSheetMngHstEntity.java index 22114522..332fde9b 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MapSheetMngHstEntity.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MapSheetMngHstEntity.java @@ -42,7 +42,7 @@ public class MapSheetMngHstEntity extends CommonDateEntity { private ZonedDateTime dataStateDttm; @Column(name = "use_inference") - private Boolean useInference; + private String useInference; @Column(name = "use_inference_dttm") private ZonedDateTime useInferenceDttm; From 88f49026b4f5b4c34bd6be4d7cbfbe2b8e03b9c9 Mon Sep 17 00:00:00 2001 From: teddy Date: Fri, 12 Dec 2025 10:34:32 +0900 Subject: [PATCH 3/4] =?UTF-8?q?=EC=82=AC=EC=9A=A9=EC=9E=90=20=EC=B4=88?= =?UTF-8?q?=EA=B8=B0=ED=99=94=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kamcoback/postgres/core/MembersCoreService.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/core/MembersCoreService.java b/src/main/java/com/kamco/cd/kamcoback/postgres/core/MembersCoreService.java index 77039d5a..8ef00a36 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/core/MembersCoreService.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/core/MembersCoreService.java @@ -46,7 +46,7 @@ public class MembersCoreService { MemberEntity memberEntity = new MemberEntity(); memberEntity.setUserId(addReq.getUserId()); memberEntity.setUserRole(addReq.getUserRole()); - memberEntity.setTempPassword(addReq.getTempPassword()); // 임시 패스워드는 암호화 하지 않음 + memberEntity.setTempPassword(addReq.getTempPassword().trim()); // 임시 패스워드는 암호화 하지 않음 memberEntity.setPassword(hashedPassword); memberEntity.setName(addReq.getName()); memberEntity.setEmployeeNo(addReq.getEmployeeNo()); @@ -71,7 +71,14 @@ public class MembersCoreService { // 임시 패스워드는 암호화 하지 않음 if (StringUtils.isNotBlank(updateReq.getTempPassword())) { - memberEntity.setTempPassword(updateReq.getTempPassword()); + // 임시 패스워드가 기존과 다르면 패스워드 변경으로 처리함 + // 상태 INACTIVE로 변경하여 사용자가 로그인할때 패스워드 변경하게함 + // 패스워드 리셋이므로 로그인 실패카운트 초기화처리함 + if (!memberEntity.getTempPassword().equals(updateReq.getTempPassword().trim())) { + memberEntity.setStatus(StatusType.INACTIVE.getId()); + memberEntity.setLoginFailCount(0); + } + memberEntity.setTempPassword(updateReq.getTempPassword().trim()); } if (StringUtils.isNotBlank(memberEntity.getEmployeeNo())) { From baf6ca775862eafe3a762656bff3439176a09165 Mon Sep 17 00:00:00 2001 From: teddy Date: Fri, 12 Dec 2025 10:49:47 +0900 Subject: [PATCH 4/4] =?UTF-8?q?=EB=B9=84=ED=99=9C=EC=84=B1=20=EC=83=81?= =?UTF-8?q?=ED=83=9C=20=ED=8C=A8=EC=8A=A4=EC=9B=8C=EB=93=9C=20=EB=B9=84?= =?UTF-8?q?=EA=B5=90=20=EC=A0=80=EC=9E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cd/kamcoback/members/AuthController.java | 24 ++++++++++++++----- .../members/service/AuthService.java | 10 ++++++++ .../postgres/core/MembersCoreService.java | 15 ++++++++++++ 3 files changed, 43 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/kamco/cd/kamcoback/members/AuthController.java b/src/main/java/com/kamco/cd/kamcoback/members/AuthController.java index 8596df04..5487bc2d 100644 --- a/src/main/java/com/kamco/cd/kamcoback/members/AuthController.java +++ b/src/main/java/com/kamco/cd/kamcoback/members/AuthController.java @@ -3,6 +3,9 @@ package com.kamco.cd.kamcoback.members; import com.kamco.cd.kamcoback.auth.CustomUserDetails; import com.kamco.cd.kamcoback.auth.JwtTokenProvider; import com.kamco.cd.kamcoback.auth.RefreshTokenService; +import com.kamco.cd.kamcoback.common.enums.StatusType; +import com.kamco.cd.kamcoback.common.enums.error.AuthErrorCode; +import com.kamco.cd.kamcoback.common.exception.CustomApiException; import com.kamco.cd.kamcoback.config.api.ApiResponseDto; import com.kamco.cd.kamcoback.members.dto.MembersDto; import com.kamco.cd.kamcoback.members.dto.SignInRequest; @@ -104,16 +107,25 @@ public class AuthController { SignInRequest request, HttpServletResponse response) { - Authentication authentication = - authenticationManager.authenticate( - new UsernamePasswordAuthenticationToken(request.getUsername(), request.getPassword())); - + // 사용자 상태 조회 String status = authService.getUserStatus(request); - + Authentication authentication = null; MembersDto.Member member = new MembersDto.Member(); + // 비활성 상태면 임시패스워드를 비교함 + if (StatusType.INACTIVE.getId().equals(status)) { + if (!authService.isTempPasswordValid(request)) { + throw new CustomApiException(AuthErrorCode.LOGIN_PASSWORD_MISMATCH); + } + } else { + authentication = + authenticationManager.authenticate( + new UsernamePasswordAuthenticationToken( + request.getUsername(), request.getPassword())); + } + // INACTIVE 비활성 상태(새로운 패스워드 입력 해야함), DELETED 탈퇴 - if (!"ACTIVE".equals(status)) { + if (!StatusType.ACTIVE.getId().equals(status)) { return ApiResponseDto.ok(new TokenResponse(status, null, null, member)); } diff --git a/src/main/java/com/kamco/cd/kamcoback/members/service/AuthService.java b/src/main/java/com/kamco/cd/kamcoback/members/service/AuthService.java index 287bc99b..7220ae34 100644 --- a/src/main/java/com/kamco/cd/kamcoback/members/service/AuthService.java +++ b/src/main/java/com/kamco/cd/kamcoback/members/service/AuthService.java @@ -33,4 +33,14 @@ public class AuthService { public String getUserStatus(SignInRequest request) { return membersCoreService.getUserStatus(request); } + + /** + * 임시 패스워드 비교 + * + * @param request + * @return + */ + public boolean isTempPasswordValid(SignInRequest request) { + return membersCoreService.isTempPasswordValid(request); + } } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/core/MembersCoreService.java b/src/main/java/com/kamco/cd/kamcoback/postgres/core/MembersCoreService.java index 8ef00a36..4ddb2490 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/core/MembersCoreService.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/core/MembersCoreService.java @@ -152,6 +152,21 @@ public class MembersCoreService { return memberEntity.getStatus(); } + /** + * 임시 패스워드 비교 + * + * @param request + * @return + */ + public boolean isTempPasswordValid(SignInRequest request) { + MemberEntity memberEntity = + membersRepository + .findByUserId(request.getUsername()) + .orElseThrow(MemberNotFoundException::new); + + return memberEntity.getTempPassword().equals(request.getPassword().trim()); + } + /** * 최초 로그인 저장 마지막 로그인 저장 *