Login
- spring security 기본 Login 페이지 대신 사용할 login.html 구현
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해주어야 한다.
- authority table에 객체가 잘 생성은 되지만 user_id가 NULL인 문제