회원가입 환경을 구현할때 여러가지로 고려해야할 사항이 많다.
예들들어, 비밀번호의 최소 갯수, 닉네임의 최수 글자수, email과 닉네임의 중복체크 등등이 있다.
-
Controller에서 회원가입 진행 시 유효성 검사하기
@PostMapping("/sign-up") public String signUpSubmit(@Valid SignUpForm signUpForm, Errors errors){ if(errors.hasErrors()) { return "account/sign-up"; } //중복검사 signUpFormValidator.validate(signUpForm,errors); if(errors.hasErrors()) { return "account/sign-up"; } //회원정보등록 Account account = accountService.processNewAccount(signUpForm); return "redirect:/"; }
@Vaild 어노테이션을 설정하면, SignUpForm에 설정한 어노테이션들을 바탕으로 유효성 검사를 진행한다. errors.hasErrors() 유효성 검사를 바탕으로 위배되는 사항이 있는경우 에러가 검출되어 다시 회원가입 창으로 이동하게 된다. 유효성 검사 이후, 중복검사를 진행한다.
2.중복검사를 진행하는 Validator
- boolean supports : 인스턴스가 검증 대상 타입인지 확인
- void validate : 실질적인 검증 작업
@Component
@RequiredArgsConstructor
public class SignUpFormValidator implements Validator {
private final AccountRepository accountRepository;
@Override
public boolean supports(Class<?> aClass) {
return aClass.isAssignableFrom(SignUpForm.class);
}
@Override
public void validate(Object object, Errors errors) {
SignUpForm signUpForm = (SignUpForm)object;
if(accountRepository.existsByEmail(signUpForm.getEmail())){
errors.rejectValue("email", "invalid.email",
new Object[]{signUpForm.getEmail()}, "이미 사용중인 이메일 입니다.");
}
if(accountRepository.existsByNickname(signUpForm.getNickname())){
errors.rejectValue("nickname", "invalid.nickname",
new Object[]{signUpForm.getNickname()}, "이미 사용중인 닉네임 입니다.");
}
}
}
-
회원가입 폼 DTO
@Data public class SignUpForm { @NotBlank @Length(min = 3, max = 20) @Pattern(regexp = "^[ㄱ-ㅎ가-힣a-z0-9-_]{3,20}$") private String nickname; @Email @NotBlank private String email; @NotBlank @Length(min = 8, max = 50) private String password; }
'Spring & JPA' 카테고리의 다른 글
자동 의존성 주입 어노테이션에 대하여(@Autowired vs @Resource vs @Inject) (0) | 2020.12.19 |
---|---|
[JPA] 영속성 컨텍스트에 대한 정리 (1) | 2020.10.24 |
스프링부트로 이메일보내기(비밀번호 찾기 / 회원가입 이메일 인증) (5) | 2020.06.03 |
Spring Security 구현 정리 (0) | 2020.05.28 |
스프링 잡학사전 (0) | 2020.05.25 |