Back_End/SpringBoot
회원가입 - 이메일 , 전화번호 <select>
기돌
2024. 4. 23. 15:26
지금까지는 input type="text"
를 사용해 ' - ' 을 입력해서 입력했습니다
https://gi-dor.tistory.com/232
회원가입 - SpringSecurity , @Valid , MySQL , MyBatis
SpringSecurity - SecurityConfig @Configuration // 빈 설정 @EnableWebSecurity // 스프링 시큐리티 웹보안 활성화 @EnableMethodSecurity(prePostEnabled = true , securedEnabled = true) public class SecurityConfig { @Bean SecurityFilterChain filte
gi-dor.tistory.com
@Setter
@Getter
@ToString
@AllArgsConstructor
@NoArgsConstructor
public class UserSignupForm {
private String tel1;
@Pattern(regexp="^[0-9]{4}$" , message = "유효한 전화번호 형식이 아닙니다")
private String tel2;
@Pattern(regexp="^[0-9]{4}$" , message = "유효한 전화번호 형식이 아닙니다")
private String tel3;
public User toEntity(PasswordEncoder passwordEncoder) {
User user = new User();
user.setId(id);
user.setPassword(passwordEncoder.encode(password));
user.setName(name);
user.setEmail(email1 + "@" + email2);
user.setTel(tel1 + "-" + tel2 + "-" + tel3 );
user.setZipCode(zipCode);
user.setAddress(address);
user.setAddressDetail(addressDetail);
return user;
}
}
public User registerUser(UserSignupForm form) {
if (userMapper.selectUserById(form.getId()) != null) {
throw new RuntimeException("이미 존재하는 아이디입니다: " + form.getId());
}
// 1 주민번호 : 1 이메일 : 다계정 일수도 있음
// if (userMapper.selectUserByEmail(form.getEmail()) != null) {
// throw new RuntimeException("이미 존재하는 이메일 입니다: " + form.getEmail());
// }
User user = form.toEntity(passwordEncoder);
userMapper.insertUser(user);
return user;
}
1개의 명의 : 1개의 이메일주소 : 다계정을 생각해서 이메일에 대해서는 중복값 입력되게 했습니다
@Mapper
public interface UserMapper {
void insertUser(User user);
}
<insert id="insertUser" parameterType="com.example.bookhub.user.vo.User">
insert into USER (
user_id ,
user_password ,
user_name ,
user_email ,
user_tel ,
user_zip_code ,
user_address,
user_address_detail
) values (
#{id} ,
#{password} ,
#{name} ,
#{email},
#{tel} ,
#{zipCode},
#{address},
#{addressDetail}
)
</insert>
public User toEntity(PasswordEncoder passwordEncoder) {
User user = new User();
user.setId(id);
user.setPassword(passwordEncoder.encode(password));
user.setName(name);
user.setEmail(email1 + "@" + email2);
user.setTel(tel1 + "-" + tel2 + "-" + tel3 );
user.setZipCode(zipCode);
user.setAddress(address);
user.setAddressDetail(addressDetail);
return user;
}
toEntity() 메서드로 user 클래스에 tel 에 저장되므로 쿼리문에 #{ tel } 을 사용하면됩니다.
@PostMapping("/join")
public String userJoin(@ModelAttribute("userSignupForm")
@Valid UserSignupForm form ,
BindingResult errors ) {
// 유효성 검사에서 오류가 발생했는지 확인하고,
// 오류가 있다면 사용자 등록 폼을 다시 보여주는 "user/registerForm" 뷰로 이동
if (errors.hasErrors()) {
return "user/registerForm";
}
try {
// UserService를 사용하여 사용자를 등록하고, 결과로 생성된 사용자 객체를 받는다
User user = userService.registerUser(form);
// 사용자 등록이 성공했을 경우, 사용자의 ID를 포함한 URL로 리다이렉트
return "redirect:/user/completed?id=" + user.getId();
} catch (RuntimeException ex) {
System.out.println(ex);
// 예외를 로깅하기
logger.error("에러 발생: ", ex); // 에러 레벨
String message = ex.getMessage();
if("id".equals(message)) {
errors.rejectValue("id", null, "사용 할 수 없는 아이디");
}
return "user/registerForm";
}
}
728x90