Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
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
Archives
Today
Total
관리 메뉴

개발자되기 프로젝트

특수문자 및 공백 검증 본문

Project/블로그 게시판 만들기

특수문자 및 공백 검증

Seung__ 2021. 10. 12. 21:35
  • 보통 회원 가입시 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


 

GitHub - bsh6463/blog

Contribute to bsh6463/blog development by creating an account on GitHub.

github.com

 

Comments