우선 회원가입 jsp파일을 수정하자.
기존의 <input>태그를 이용해 정보를 입력하던 방식에서 spring의 form 태그를 이용해서 입력을 관리하도록 하자.
<form:form action="${root }user/signIn_pro" method="post" modelAttribute="signInUserBean">
<div class="form-group">
<form:label path="user_name">이름</form:label>
<form:input path="user_name" class="form-control"/>
<form:errors path="user_name" style='color:red'/>
</div>
<div class="form-group">
<form:label path="user_id">아이디</form:label>
<div class="input-group">
<form:input path="user_id" class="form-control"/>
<div class="input-group-append">
<form:button class="btn btn-dark">중복확인</form:button>
</div>
</div>
<form:errors path="user_id" style='color:red'/>
</div>
<div class="form-group">
<form:label path="user_email">이메일</form:label>
<form:input path="user_email" class="form-control"/>
<form:errors path="user_email" style='color:red'/>
</div>
<div class="form-group">
<form:label path="user_nickname">닉네임</form:label>
<div class="input-group">
<form:input path="user_nickname" class="form-control"/>
<div class="input-group-append">
<form:button class="btn btn-dark">중복확인</form:button>
</div>
</div>
<form:errors path="user_nickname" style='color:red'/>
</div>
<div class="form-group">
<form:label path="user_pw">비밀번호</form:label>
<form:password path="user_pw" class="form-control"/>
<form:errors path="user_pw" style='color:red'/>
</div>
<div class="form-group">
<form:label path="user_pw2">비밀번호 확인</form:label>
<form:password path="user_pw2" class="form-control"/>
<form:errors path="user_pw2" style='color:red'/>
</div>
<div class="form-group">
<div class="text-md-right">
<form:button class="btn btn-primary">회원가입</form:button>
<a href="${root }user/signIn_cancel" class="btn btn-danger">취소</a>
</div>
</div>
</form:form>
각 입력값에 대해 유효값 검사를 하자.
UserBean에 가서 각 필드별로 검사 항목을 써준다.
public class UserBean {
private int user_idx;
@Size(min=2, max=4)
@Pattern(regexp="[가-힣]*")
private String user_name;
@Size(min=4,max=20)
@Pattern(regexp="[a-zA-z0-9]*")
private String user_id;
@Size(min=4,max=20)
@Pattern(regexp="[a-zA-z0-9]*")
private String user_pw;
@Size(min=4,max=20)
@Pattern(regexp="[a-zA-z0-9]*")
private String user_pw2;
@Size(min=6,max=30)
@Pattern(regexp="^[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*.[a-zA-Z]{2,3}$")
private String user_email;
@Size(min=2,max=5)
@Pattern(regexp="[0-9a-zA-Z가-힣]*")
private String user_nickname;
...중략
size와 pattern을 검사하기로 한다.
UserController에서 signIn_pro에 대한 매핑을 해줌과 동시에 유효값 검사도 하도록 하자.
@PostMapping("user/signIn_pro")
public String signIn_pro(@Valid @ModelAttribute("signInUserBean") UserBean signInUserBean, BindingResult result) {
if(result.hasErrors()) {
return "user/signIn";
}
return "user/signIn_success";
}
@Valid 를 통해 modelAttribute로 들어온 signInUserBean에 대해서 유효값을 검사한다.
BindingResult에서 에러가 있다면 돌아오고 없다면 가입을 성공시키자.
검사를 제대로 하는 것을 확인했고, 이제 에러 메세지를 직접 커스텀하자.
properties 폴더 하위에 error_message.properties 파일을 만든다.
검사하는 방법과 검사하는 개체이름, 개체의 필드를 통해 각 메세지를 세팅할 수 있다.
다음과같이 세팅하고 ServletAppContext에 에러 메세지를 등록하자.
Size.signInUserBean.user_name = 사용자 이름은 2 ~ 4글자여야 합니다.
Size.signInUserBean.user_id = 사용자 아이디는 4 ~ 20글자여야 합니다.
Size.signInUserBean.user_pw = 비밀번호는 4 ~ 20글자여야 합니다.
Size.signInUserBean.user_pw2 = 비밀번호 확인은 4 ~ 20글자여야 합니다.
Size.signInUserBean.user_email = 사용자 이메일은 6 ~ 30글자여야 합니다.
Size.signInUserBean.user_nickname = 사용자 닉네임은 2 ~ 5글자여야 합니다.
Pattern.signInUserBean.user_name = 사용자 이름은 한글만 허용합니다.
Pattern.signInUserBean.user_id = 사용자 아이디는 영어, 숫자만 허용합니다.
Pattern.signInUserBean.user_pw = 비밀번호는 영어, 숫자만 허용합니다.
Pattern.signInUserBean.user_pw2 = 비밀번호는 영어, 숫자만 허용합니다.
Pattern.signInUserBean.user_email = 이메일 양식을 준수하여 주십시오.
Pattern.signInUserBean.user_nickname = 닉네임은 한글, 영어, 숫자만 허용합니다.
@Bean
public ReloadableResourceBundleMessageSource messageSource() {
ReloadableResourceBundleMessageSource res = new ReloadableResourceBundleMessageSource();
res.setBasenames("/WEB-INF/properties/error_message");
return res;
}
이렇게 메세지를 등록한다.
이대로 실행하면 에러가 발생한다.
왜냐하면 이전에 @PropertySource를 통해 등록한 db.properties와 충돌하기 때문인데, 따라서 아래 코드를 추가해 충돌을 방지한다.
@Bean
public static PropertySourcesPlaceholderConfigurer PropertySource() {
return new PropertySourcesPlaceholderConfigurer();
}
이제 실행해보면 아래와 같이 제대로 검사함을 알 수 있다.

이제 비밀번호와 비밀번호 확인에 대한 검사를 추가하자.
두 비밀번호는 일치해야한다.
validator라는 패키지를 추가하고 UserValidator라는 클래스를 선언하자.
validator라는 인터페이스를 상속받아 함수를 overriding한다.
public class UserValidator implements Validator{
@Override
public boolean supports(Class<?> clazz) {
return UserBean.class.isAssignableFrom(clazz);
}
@Override
public void validate(Object target, Errors errors) {
UserBean userBean = (UserBean)target;
if(userBean.getUser_pw().contentEquals(userBean.getUser_pw2())== false) {
errors.rejectValue("user_pw", "NotEquals");
errors.rejectValue("user_pw2", "NotEquals");
}
}
}
supports는 사용법이 정해져있으니 그대로 쓰면 되고, validate는 우리가 검사하고 싶은 내용을 적는다.
user_pw와 user_pw2가 같은지를 검사해서 다르면 NotEquals라는 이름으로 오류를 검사하게한다.
error_message.properties에 아래 메세지를 등록한다.
NotEquals.signInUserBean.user_pw = 비밀번호가 일치하지 않습니다.
NotEquals.signInUserBean.user_pw2 = 비밀번호가 일치하지 않습니다.
등록한 메세지와 validator를 사용하기 위해 UserController에 코드를 추가한다.
@InitBinder
public void initBinder(WebDataBinder binder) {
UserValidator validator1 = new UserValidator();
binder.addValidators(validator1);
}
initBinder까지 추가하면 추가로 validator가 실행된다.
'프로젝트 > 게시판미니프로젝트' 카테고리의 다른 글
[프로젝트] 로그인 처리 (0) | 2020.05.08 |
---|---|
[프로젝트] 회원가입 - 아이디 중복 확인, 회원 가입 정보 저장 (0) | 2020.05.08 |
[프로젝트] 상단 메뉴 관리 (0) | 2020.05.07 |
[프로젝트] 데이터베이스 테이블 & Mybatis 초기 설정 (0) | 2020.05.06 |
[프로젝트] 상단 메뉴 기본 구조 설정 (0) | 2020.05.06 |