Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Servlet
- 스프링
- kotlin
- Exception
- 스프링 핵심 원리
- Android
- pointcut
- springdatajpa
- http
- 알고리즘
- 스프링 핵심 기능
- AOP
- transaction
- JPQL
- SpringBoot
- 그리디
- QueryDSL
- java
- Thymeleaf
- Greedy
- 백준
- Spring Boot
- 인프런
- jpa
- spring
- Proxy
- 김영한
- JDBC
- 자바
- db
Archives
- Today
- Total
개발자되기 프로젝트
특수문자 및 공백 검증 본문
- 보통 회원 가입시 id, email등에 조건이 있다.
- 공백을 포함하지 않음.
- id, 이름,email에 특수문자 포함하지 않음(email의 @제외)
- 비밀번호는 1개 이상의 특수문자 사용.
- 위의 조건을 검증하는 로직을 추가해보자.
1.MemberController
- 공백 허용 없음.
- id, 이름, email 특수문자 허용 없음.
- email에는 반드시 @ 포함.
- 검증 순서는
- 필수값 입력 여부
- 공백
- 특수문자 검증
- id 중복여부
@Controller
@RequiredArgsConstructor
@Slf4j
@RequestMapping("/members")
public class MemberController {
private final MemberService memberService;
Map<String, String> errors = new HashMap<>();
String[] specialCharacters = {"!", "#", "$", "%", "^", "&", "*", "(", ")", "=", "+", "/"};
private Map<String, String> fieldValidation(MemberForm memberForm, Map<String, String> errors, Model model) {
log.info("검증로직 실행");
//필수값 검증
nullCheck(memberForm, errors);
//공백 검증
checkWhiteSpace(memberForm, errors);
//특수문자 검증
checkSpecialCharacters(memberForm, errors);
//중복 검증
overlapCheck(memberForm, errors);
return errors;
}
private void nullCheck(MemberForm memberForm, Map<String, String> errors) {
//userId가 null인 경우
if(!StringUtils.hasText(memberForm.getUserId()) || memberForm.getUserId().equals("")){
//bindingResult.addError(new FieldError("member", "userId", "ID는 필수 입니다."));
errors.put("userId", "ID는 필수 입니다.");
}
//PW가 null인경우
if(!StringUtils.hasText(memberForm.getPassword())){
//bindingResult.addError(new FieldError("member", "password", "PW는 필수 입니다."));
errors.put("password", "PW는 필수 입니다.");
}
//name이 null인 경우
if(!StringUtils.hasText(memberForm.getName())){
//bindingResult.addError(new FieldError("member", "password", "PW는 필수 입니다."));
errors.put("name", "이름은 필수 입니다.");
}
//email이 null인 경우
if(!StringUtils.hasText(memberForm.getEmail())){
//bindingResult.addError(new FieldError("member", "password", "PW는 필수 입니다."));
errors.put("email", "email은 필수 입니다.");
}
}
private void overlapCheck(MemberForm memberForm, Map<String, String> errors) {
if(memberService.findMemberByUserId(memberForm.getUserId()) != null){
String message = "사용하신 "+ memberForm.getUserId() + " 는(은) 이미 사용된 ID 입니다.";
log.info("userId : {}", memberForm.getUserId());
errors.put("userId", message);
}
}
private void checkWhiteSpace(MemberForm memberForm, Map<String, String> errors) {
if (StringUtils.containsWhitespace(memberForm.getUserId())){
errors.put("userId", "공백을 포함할 수 없습니다.");
}
if (StringUtils.containsWhitespace(memberForm.getName())){
errors.put("name", "공백을 포함할 수 없습니다.");
}
if (StringUtils.containsWhitespace(memberForm.getPassword())){
errors.put("password", "공백을 포함할 수 없습니다.");
}
if (StringUtils.containsWhitespace(memberForm.getEmail())){
errors.put("email", "공백을 포함할 수 없습니다.");
}
}
private void checkSpecialCharacters(MemberForm memberForm, Map<String, String> errors) {
int cntSc = 0;
// Email주소 @누락
if(!memberForm.getEmail().contains("@")){
errors.put("email", "email 형식 오류 : '@'를 포함해야 합니다.");
}
for (String sc : specialCharacters) {
if(memberForm.getEmail().contains(sc)){
errors.put("email", "'!', '#', '$' 등의 특수문자를 포함할 수 없습니다.");
}
if(memberForm.getUserId().contains(sc)){
errors.put("userId", "'!', '#', '$' 등의 특수문자를 포함할 수 없습니다.");
}
if(memberForm.getName().contains(sc)){
errors.put("name", "'!', '#', '$' 등의 특수문자를 포함할 수 없습니다.");
}
if(!memberForm.getPassword().contains(sc)){
++cntSc;
if(cntSc == specialCharacters.length){
errors.put("password", "1개 이상의 특수문자를 포함해야 합니다.");
}
}
}
}
}
2. 결과
- 의도대로 검증이 진행된다.
3. 앞으로
est용 data 서버시작할 때 DB에 올리기Listener
createdAt, updatedAt등
게시글에 작성자 표시view 정리게시글 검색- 검색 옵션 추가 : 작성자, 제목 구분
영속성 전이 설정게시글 삭제회원 탈퇴
댓글 삭제 버튼글 수정 기능 추가- 대댓글
- 검증 & 예외처리
회원 가입시 필수 정보 지정.특수문자, 공백 검증 등(email 형식?)- Spring제공 Validator로 변경.
- 인증처리
- 로그인한 사용자만 글 & 댓글 작성 가능.
- 본인이 작성한 글, 댓글만 삭제 가능
- 관리자는 모든 권한
- 예외처리
- 페이징 처리
- 컬렉션 조회 최적화
4. GitHub: 211011 Special Characters Validation
'Project > 블로그 게시판 만들기' 카테고리의 다른 글
인증처리 - 본인이 작성한 것만.. (0) | 2021.10.13 |
---|---|
비 로그인 사용자 처리 (0) | 2021.10.12 |
회원가입시 검증 기능 추가 - 검증 직접 처리 (0) | 2021.10.12 |
글 수정 기능 추가 (0) | 2021.10.10 |
댓글 삭제버튼 추가 (0) | 2021.10.09 |
Comments