비밀번호 유효성 검사 : 백엔드, 프론트엔드(js)에서 이중으로 각각 해주기!
1. 디펜던시 추가
- spring boot ver 2.3 부터 의존성을 따로 추가해줘야한다.
build.gradle
implementation 'org.springframework.boot:spring-boot-starter-validation'
pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
<version>2.5.2</version>
</dependency>
2. 어노테이션
@Null // (o):Null
@NotNull // (o) : "", " ", (X) : Null
@NotEmpty // (o) : " " (X) : Null, ""
@NotBlank // (X) : null, "", " "
@Email // 이메일 형식 검사, "" 가능
@Pattern(regexp = ) // 정규식 검사
@Size(min=, max=) // 길이 제한
@Max(value = )
@Min(value = )
@Positive // 양수만
@PositiveOrZero // 양수와 0만
@Negative // 음수만
@NegativeOrZero // 음수와 0만
3. @Valid, @Validated 차이
- @Valid
- @Validated : 그룹 유효성 추가됨
https://www.baeldung.com/spring-valid-vs-validated
4. DTO
DTO 역할
1)client의 요청 데이터가 dto 클래스로 캡슐화되어 server로 전달 (패스워드 유효성)
2)Controller <-> Service 계층 간 데이터 전달
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
@Data
@Getter
@Setter
public class MemberDto {
@NotBlank(message = "id를 입력하세요.")
@Size(min = 6, max = 20, message = "id는 최소 6자 , 최대 20자로 생성하세요.")
private String id;
@NotBlank(message = "pw를 입력하세요")
@Pattern(regexp="(?=.*[0-9])(?=.*[a-z])(?=.*\\W)(?=\\S+$).{8,16}",
message = "8~16 characters consisting of letters(A-Z, a-z), numbers, or special characters.")
private String pw;
@Email(message = "이메일 형식에 맞지 않습니다.")
private String email;
}
5. controller
import com.myPJ.member.domain.Member;
import com.myPJ.member.dto.MemberDto;
import com.myPJ.member.service.MemberService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.Errors;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import javax.validation.Valid;
@Controller
public class MemberController {
@Autowired
MemberService memberService;
@RequestMapping(value = "/signup")
public String signUp() {
return "view/signUp";
}
@RequestMapping(value = "/newMember", method = RequestMethod.POST)
public String newMember(Member member){
//memberService.test(member);
memberService.signUp(member);
return "view/main";
}
@PostMapping(value = "signup")
public String validCheck(@Valid MemberDto memberDto, Errors errors, Model model){
if(errors.hasErrors()){
//패스워드 유효성 검사 부적합
Map<String, String> validatorResult = MemberService.validateHandling(errors);
for (String key : validatorResult.keySet()) {
model.addAttribute(key, validatorResult.get(key));
}
// 유효성 통과 못한 필드와 메시지를 핸들링
return "view/singup";
}
return "view/main";
}
}
@Valid
- 유효성 체크 어노테이션
model.addAttribute("userDto", userDto);
- 회원가입 실패 시, 입력 정보 유지
6. Service
errors.getFieldErrors() : 유효성 검사 실패 필드 목록 정보
error.getField() : 필드명
error.getDefaultMessage() : 저장된 메세지
'JAVA > spring' 카테고리의 다른 글
javax.validation 패키지 | spring-boot-starter-validation (0) | 2022.04.16 |
---|---|
lombok(롬복) 설치 및 적용 (0) | 2022.03.24 |
타임리프(Thymeleaf) (0) | 2022.03.23 |
Spring directory 구조 (0) | 2022.03.12 |
스프링 프로젝트 생성 (이클립스) (0) | 2021.12.24 |