반응형
회원가입 유효성 검사를 위해 정리한 내용입니다.
1. pom.xml 설정
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.10.Final</version>
</dependency>
2. MemberVO 유효성 설정
public class MemberVO extends LoginVO {
@Pattern(regexp = "^[a-z | A-Z]{3,6}[0-9]{3,6}$")
private String user_id;
@Pattern(regexp="^.*(?=.{6,20})(?=.*[0-9])(?=.*[a-zA-Z]).*$")
private String password;
private String sign_date;
@Email()
private String email;
private String ip;
@Pattern(regexp = "^(01[1|6|7|8|9|0])-(\\d{3,4})-(\\d{4})$")
private String phone;
@Pattern(regexp = "^[가-힣]{2,6}$")
private String name;
private String birth_day;
private String solar_birth_yn;
@Pattern(regexp = "^[가-힣]+[가-힣\\s]*$")
private String address;
private String write_date;
기타 제약 사항
아노테이션 | 설명 |
---|---|
@AssertFalse | 값이 false 인지 확인합니다. |
@AssertTrue | 값이 true 인지 확인합니다. |
@DecimalMax(value=, inclusive=) | inclusive=false일때 지정된 최대값 보다 작은지 확인합니다. inclusive=true 이면 값이 지정된 최대값보다 작거나 같은지 확인합니다. 매개변수 값은 BigDecimal 문자열 표현에 따라 최대값의 문자열 표현입니다. |
@DecimalMin(value=, inclusive=) | 값이 inclusive=false일때 지정된 최소값 보다 큰지 확인합니다. inclusive=true 이면 값이 지정된 최소값보다 크나 같은지 확인합니다. 매개변수 값은 BigDecimal 문자열 표현에 따라 최소값의 문자열 표현입니다. |
@Digits(integer=, fraction=) | 값이 integer=와 fraction=에 의해 지정된 자리수의 숫자인지 확인합니다. |
지정된 문자 시퀀스가 유효한 전자 메일 주소인지 여부를 확인합니다. 선택적 매개 변수 regexp 및 flags를 사용하면 전자 메일과 일치해야하는 추가 정규 표현식 (정규식 플래그 포함)을 지정할 수 있습니다. | |
@Future | 날짜가 미래인지 확인합니다. |
@FutureOrPresent | 날짜가 현재 또는 미래인지 확인합니다. |
@Max(value=) | 값이 지정된 최대값보다 작거나 같은지 확인합니다. |
@Min(value=) | 값이 지정된 최소값보다 크거나 같은지 확인합니다. |
@NotBlank | 값이 null이 아니고, 트림 된 길이가 0보다 큰지 확인합니다. @NotEmpty와의 차이점은 이 제약은 CharSequence에만 적용되고 트림된다는 것입니다. |
@NotEmpty | 값이 null도 빈것도 아닌지 확인합니다. |
@NotNull | 값이 null이 아닌지 체크합니다. |
@Negative | 값이 음수인지 확인합니다. |
@NegativeOrZero | 값이 음수이거나 0인지 확인합니다. |
@Null | 값이 null인지 확인합니다. |
@Past | 값이 과거일자인지 확인합니다. |
@PastOrPresent | 값이 과거 또는 현재인지 확인합니다. |
@Pattern(regex=, flags=) | 주어진 플래그 매치를 고려하여 값이 정규식 regex와 일치하는지 검사합니다. |
@Positive | 값이 양수 인지 확인합니다. |
@PositiveOrZero | 값이 양수이거나 0인지 확인합니다. |
@Size(min=, max=) | 값이 min=과 max= 사이에 있는지 확인합니다.(경계 포함) |
3. message-context.xml
폴더 구성
<bean id="messageSource"
class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<!-- Encoding 설정 -->
<property name="defaultEncoding" value="UTF-8"/>
<!-- Reload Cache 설정 -->
<property name="cacheSeconds" value="5"/>
<!-- basenames 설정: 아래처럼 하면 WEB-INF 밑의 message 폴더 아래의 labels로 시작하는 모든 Property-->
<property name="basenames">
<list>
<value>/WEB-INF/message/message</value>
</list>
</property>
</bean>
message_ko_KR.properties
<!-- MemberVo Valid -->
Pattern.memberVo.user_id="아이디는 영문 3글자 + 숫자 3글자 조합으로 6~8자리로 입력주세요."
Email.memberVo.email="이메일 형식이 아닙니다."
Pattern.memberVo.phone="폰 번호 형식이 아닙니다."
Pattern.memberVo.name="이름은 한글 2~6자리로 입력해주세요."
Pattern.memberVo.address="한글로 작성해주세요."
Pattern.memberVo.password="영문 숫자 조합으로 6자리 이상 20자리 이하로 비밀번호를 만들어주세요."
4. Contoller에서 @Valid 설정
@GetMapping("/sign")
public String memberSign(Model model) {
logger.info("-------GET member sign");
model.addAttribute("memberVo", new MemberVO());
return "member/sign_form";
}
스프링에서 제공하는 Form의 ModelAttribute에 담고자 하는 VO를 생성하여 전달합니다.
jsp form의 태그 중 modelAttribute를 확인
@PostMapping(value = "")
public String memberInsert(Model model, @ModelAttribute("memberVo") @Valid MemberVO memberVo,
BindingResult bindingResult, RedirectAttributes rttr) {
logger.info("--------------POST member-----");
if (bindingResult.hasErrors()) {
return "member/sign_form";
}
int count = loginService.checkSignLoginId(memberVo.getUser_id());
if (count != 0) {
model.addAttribute("MSG", MessageUtils.getMessage("fail.Sign"));
return "member/sign_form";
} else {
memberService.loginAndMemberInsert(memberVo);
rttr.addFlashAttribute("MSG", MessageUtils.getMessage("success.Sign"));
return "redirect:/";
}
}
jsp form에서 저장해두었던 @ModelAttribute("memberVo")을 받아 @Valid MemberVO memberVo의 유효성 검사를 합니다.
BindingResult는 유효성 검사가 끝난 후 오류가 있으면 에러를 담아둡니다.
5. View - Form 체크(jsp)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="f" uri="http://www.springframework.org/tags/form"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원 가입</title>
</head>
<body onload="document.f.user_id.focus();">
<f:form name="f" action="${pageContext.request.contextPath }/member"
method="POST" modelAttribute="memberVo">
<table>
<tr>
<td>아이디 (영문 3글자+숫자 3글자 조합)</td>
<!-- <td><input type="text" id="user_id" name="user_id" onfocus="this.value=''"/></td> -->
<td><f:input path="user_id" /></td>
<td><input type="button" value="중복확인" onclick="check_id()" />
<f:errors path="user_id" cssClass="error" /></td>
</tr>
<tr>
<td>비밀번호(6~20자리)</td>
<!-- <td><input type="password" id="password" /></td> -->
<td><f:password path="password" /> </td>
<td><f:errors path="password"
cssClass="error" /></td>
</tr>
<tr>
<td>이름</td>
<!-- <td><input type="text" id="name" /></td> -->
<td><f:input path="name" /> </td>
<td><f:errors path="name"
cssClass="error" /></td>
</tr>
<tr>
<td>email</td>
<!-- <td><input type="text" id="email" /></td> -->
<td><f:input path="email" /> </td>
<td><f:errors path="email"
cssClass="error" /></td>
</tr>
<tr>
<td>핸드폰(010-1234-1234)</td>
<!-- <td><input type="text" id="phone" /></td> -->
<td><f:input path="phone" /> </td>
<td><f:errors path="phone"
cssClass="error" /></td>
</tr>
<tr>
<td>생년월일</td>
<!-- <td><input type="date" id="birth_day" /></td> -->
<td><f:input type="date" path="birth_day" /></td>
<td></td>
</tr>
<tr>
<td>양력/읍력 사용</td>
<!-- <td><select name="solar_yn" id="solar_yn">
<option value="1">양력</option>
<option value="0">음력</option>
</select></td> -->
<td><f:select path="solar_birth_yn" id="solar_birth_yn">
<f:option value="1">양력</f:option>
<f:option value="0">음력</f:option>
</f:select></td>
</tr>
<tr>
<td>주소</td>
<!-- <td><input type="text" id="address" /></td> -->
<td><f:input path="address" /> </td>
<td><f:errors path="address"
cssClass="error" /></td>
</tr>
</table>
<input type="button" value="가입" onclick="ip_pass()">
<input type="reset" value="리셋">
<input type="button" value="취소" onclick="cancel_sign()">
<input type="hidden" id="client_id_sign" value="">
</f:form>
${MSG }
</body>
</html>
<f:input>은 폼에서 제공하는 html input과 같습니다. path에는 modelAttribute에 해당하는 명칭을 작성합니다.
<f:errors>는 VO에 해당하는 전달 받은 에러를 출력합니다.
6. 실행 결과
반응형
'개발(합니다) > Java&Spring' 카테고리의 다른 글
Spring 유효성 검사(interface) (0) | 2019.01.24 |
---|---|
Spring Security에서 사용자 정보 가져오기 (0) | 2019.01.23 |
Spring Security 정리 (5) : 로그인 성공 후 처리 (0) | 2019.01.21 |
Spring Security 정리 (4) : 로그인 실패 후 처리 (2) | 2019.01.20 |
Spring에서 메세지 처리하기 (0) | 2019.01.18 |