Home [Numble Backend Challenge] 2일차
Post
Cancel

[Numble Backend Challenge] 2일차

Login

  • spring security 기본 Login 페이지 대신 사용할 login.html 구현

LoginPage

Signup

  • Post 요청 받을 UserDto

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    
      @NoArgsConstructor
      @Getter
      @Setter
      public class UserDto {
        
          @Email(message = "Email형식이 올바르지 않습니다.")
          @NotBlank(message = "Email을 입력해주세요.")
          private String email;
        
          @NotBlank(message = "이름을 입력해 주세요.")
          private String username;
        
          @NotBlank(message = "비밀번호를 입력해주세요.")
          private String password;
        
          private String passwordCheck;
        
          @NotBlank(message = "핸드폰 번호를 입력해주세요.")
          private String phoneNumber;
        
          private Boolean check;
      }
    
  • password Check 및 중복 Email검사용 Validator추가

    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
    
      @Component
      public class SignUpValidator implements Validator {
        
          private final UserService userService;
        
          public SignUpValidator(UserService userService) {
              this.userService = userService;
          }
        
          @Override
          public boolean supports(Class<?> clazz) {
              return UserDto.class.equals(clazz);
          }
        
          @Override
          public void validate(Object obj, Errors errors) {
              UserDto target = (UserDto) obj;
              if (target.getPassword() == null ||
                  !target.getPassword().equals(target.getPasswordCheck())) {
                  errors.rejectValue("passwordCheck", "key", "비밀번호가 일치하지 않습니다.");
              }
              if (userService.emailDuplicate(target.getEmail())) {
                  errors.rejectValue("email", "key", "이미 존재하는 Email입니다.");
              }
          }
      }
    
    • SignUpValidator는 signup Post 요청을 처리하는 method에서 의존성 주입을 받아 검증 로직을 수행하고 해당 컨트롤러 메서드에서 Validation error가 발생하면 다시 signup page를 반환하고 정상적으로 생성이 완료 되었다면 home Page로 redirect해준다.
  • User Entity 생성

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
      public void createUser(UserDto signUpDto) {
              User user = modelMapper.map(signUpDto, User.class);
              Authority baseAuth = new Authority();
              user.setPassword(new BCryptPasswordEncoder().encode(user.getPassword()));
              baseAuth.setUser(user);
              baseAuth.setAuthority("ROLE_COMMON_USER");
              user.getAuthorities().add(baseAuth);
              repository.save(user);
          }
    
    • 검증이 끝난 UserDto를 ModelMapper를 통해 user entity 객체로 변환하고 Password를 Encoding해서 변경해주고, 기본 권한을 추가한다.
    • user를 Save할 때 authority에 대한 항목도 함께 insert하기 위해 User Entity의 Set에 CASCADE 옵션을 추가해주었다.
      • authority table에 객체가 잘 생성은 되지만 user_id가 NULL인 문제
        • CASCADE를 처리할 때 user에만 authority를 추가해주고 user를 save했는데 이럴경우 authority 객체에는 user에 대한 정보가 없으므로 user_id에 null이 들어가게된다.
        • 위의 코드처럼 user의 collection에 authority를 추가하고 해당 authority에도 User를 set해주어야 한다.
This post is licensed under CC BY 4.0 by the author.