From 21fb2e9cf813b2005e5aab8945e3dd7a749c0001 Mon Sep 17 00:00:00 2001 From: mummumm <01088287493@daum.net> Date: Mon, 24 Feb 2025 16:44:03 +0900 Subject: [PATCH] =?UTF-8?q?=F0=9F=A9=B9=20fix=20[#41]=20:=20user=20?= =?UTF-8?q?=ED=9A=8C=EC=9B=90=EA=B0=80=EC=9E=85=20validation=20=EC=A0=81?= =?UTF-8?q?=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - UserController, UserDto 클래스 수정 --- .../domain/user/controller/UserController.java | 9 +++++---- .../_delivery/domain/user/dto/UserDto.java | 14 ++++++++++++-- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/sparta/spring_deep/_delivery/domain/user/controller/UserController.java b/src/main/java/com/sparta/spring_deep/_delivery/domain/user/controller/UserController.java index 66de2f6..ee047d4 100644 --- a/src/main/java/com/sparta/spring_deep/_delivery/domain/user/controller/UserController.java +++ b/src/main/java/com/sparta/spring_deep/_delivery/domain/user/controller/UserController.java @@ -18,6 +18,7 @@ import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.validation.BindingResult; +import org.springframework.validation.FieldError; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; @@ -39,11 +40,11 @@ public class UserController { private final JwtUtil jwtUtil; @PostMapping("/signup") - public ResponseEntity signup(@RequestBody UserDto userDto, BindingResult bindingResult) { + public ResponseEntity signup(@Valid @RequestBody UserDto userDto, + BindingResult bindingResult) { if (bindingResult.hasErrors()) { - String errorMsg = bindingResult.getFieldError("email") != null ? - bindingResult.getFieldError("email").getDefaultMessage() : - "Invalid input"; + FieldError fieldError = bindingResult.getFieldError(); + String errorMsg = fieldError != null ? fieldError.getDefaultMessage() : "Invalid input"; logger.error("Sign up error: {}", errorMsg); return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(errorMsg); } diff --git a/src/main/java/com/sparta/spring_deep/_delivery/domain/user/dto/UserDto.java b/src/main/java/com/sparta/spring_deep/_delivery/domain/user/dto/UserDto.java index 59b6abe..2492b20 100644 --- a/src/main/java/com/sparta/spring_deep/_delivery/domain/user/dto/UserDto.java +++ b/src/main/java/com/sparta/spring_deep/_delivery/domain/user/dto/UserDto.java @@ -4,6 +4,7 @@ import com.sparta.spring_deep._delivery.domain.user.entity.UserRole; import jakarta.validation.constraints.Email; import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Pattern; import lombok.Getter; import lombok.Setter; @@ -11,12 +12,21 @@ @Setter public class UserDto { + @NotBlank(message = "사용자 아이디는 필수 입력값입니다.") + @Pattern(regexp = "^[a-z0-9]{4,10}$", + message = "사용자 아이디는 영문 소문자, 숫자만 사용하여 4~10자리여야 합니다.") private String username; + @NotBlank(message = "비밀번호는 필수 입력값입니다.") + @Pattern(regexp = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[@$!%*?&])[A-Za-z\\d@$!%*?&]{8,15}$", + message = "비밀번호는 8~15자리여야 하며, 영문 대소문자, 숫자, 특수문자를 포함해야 합니다.") private String password; - @Email(message = "input valid e-mail form") - @NotBlank(message = "input e-mail") + @NotBlank(message = "이메일은 필수 입력값입니다.") + @Email(message = "올바른 이메일 형식이 아닙니다.") + @Pattern(regexp = "^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,6}$", + message = "이메일 형식이 올바르지 않습니다.") + // 영문 대/소문자, 숫자, 특수문자, '+'는 앞의 패턴이 1회이상 반복 / @ 기호 필수 / .은 실제 점, 영문대소문자, 2~6자 길이 제한, $은 문자열의 끝이 최상위 도메인인지 체크 private String email; private UserRole role;