정규식기반의 ID 및 비밀번호 검증

song yuheon·2023년 9월 2일
0

Spring

목록 보기
31/93
post-thumbnail

정규식기반의 ID 및 비밀번호 검증


사용자의 ID(아이디)와 PW(비밀번호)를 검증하기 위한 조건을 정규식으로 설정하고, 해당 조건을 기반으로 입력받은 ID와 PW의 유효성을 검사한다.


정규식

    private static final Pattern USERNAME_PATTERN = Pattern.compile("^[a-z0-9]{4,10}$");
    private static final Pattern PASSWORD_PATTERN = Pattern.compile("^[a-zA-Z0-9]{8,15}$");

  • USERNAME_PATTERN
    아이디는 소문자 알파벳 및 숫자로 구성되어 있어야 하며, 길이는 4자 이상 10자 이하로 설정
  • PASSWORD_PATTERN
    비밀번호는 대문자 및 소문자 알파벳, 숫자로 구성되어 있어야 하며, 길이는 8자 이상 15자 이하로 설정

유효성 검사 메서드


    public static boolean isValidUsername(String username) {
        return USERNAME_PATTERN.matcher(username).matches();
    }

    public static boolean isValidPassword(String password) {
        return PASSWORD_PATTERN.matcher(password).matches();
    }

  • isValidUsername
    입력받은 아이디가 USERNAME_PATTERN 정규식과 일치하는지 검사한다.
  • isValidPassword
    입력받은 비밀번호가 PASSWORD_PATTERN 정규식과 일치하는지 검사한다.


    public void signup(UserDto requestDto) {
        String username = requestDto.getUsername();
        String password = requestDto.getPassword();
        if (!isValidPassword(password))
            throw new IllegalArgumentException("PW 형태가 부적절합니다.");
        else
            password = passwordEncoder.encode(password);

        if (!isValidUsername(username))
            throw new IllegalArgumentException("ID 형태가 부적절합니다.");

        // 회원 중복 확인
        Optional<User> checkUsername = userRepository.findByUsername(username); // 쿼리 메서드 사용
        if (checkUsername.isPresent()) {
            throw new IllegalArgumentException("중복된 사용자가 존재합니다.");
        }

        User user = new User(username, password);
        userRepository.save(user);
        System.out.println("=======");
    }

검증 및 예외 처리

  1. 사용자가 입력한 비밀번호가 isValidPassword 메서드를 통과하지 못하면, "PW 형태가 부적절합니다."라는 예외 메시지와 함께 IllegalArgumentException을 발생시킨다.
  2. 사용자가 입력한 아이디가 isValidUsername 메서드를 통과하지 못하면, "ID 형태가 부적절합니다."라는 예외 메시지와 함께 IllegalArgumentException을 발생시킨다.
  3. 비밀번호의 유효성 검사 후에는 해당 비밀번호를 인코딩한다. 여기서는 passwordEncoder.encode(password)를 사용하여 인코딩이 진행하고 인코딩된 비밀번호와 아이디를 User객체를 만들어서 DB에 저장한다.

profile
backend_Devloper

0개의 댓글