@GetMapping("/")
public String home(Model model) {
log.info("home Controller");
model.addAttribute("loginForm", new LoginForm());
return "login";
}
홈 화면
@GetMapping("/signup")
public String createForm(Model model) {
log.info("회원 가입 폼을 표시합니다.");
model.addAttribute("memberForm", new MemberForm());
return "signup";
}
package Book_Toy_Project.BOOK.Form;
import jakarta.validation.constraints.*;
import lombok.Getter;
import lombok.Setter;
@Getter @Setter
public class MemberForm {
@NotBlank(message = "회원 이름은 필수 입니다.")
private String name;
@NotBlank(message = "회원 아이디는 필수 입니다.")
@Email(message = "올바른 이메일 주소 형식이어야 합니다.")
private String email;
@NotBlank(message = "비밀번호는 필수 입니다.")
@Size(min = 8, message = "비밀번호는 최소 8글자 이상이어야 합니다.")
@Pattern(regexp = "^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=!~`*()_+=]).*$",
message = "정규 표현식을 사용하여 대문자, 소문자, 숫자, 특수 문자를 포함해야 합니다.")
private String password;
@NotBlank(message = "주소를 입력해주세요")
private String address;
private String address2;
}
-LoginController
@PostMapping("/signup")
public String create(@Valid MemberForm form, BindingResult result) {
if (result.hasErrors()) {
log.error("회원가입 실패: 유효성 검사 오류가 발생했습니다.");
return "signup";
}
String hashedPassword = passwordEncoder.encode(form.getPassword());
Member member = memberService.getMember(form, hashedPassword);
try {
memberService.join(member);
log.info("회원가입 성공: {}", member.getName());
return "redirect:/";
} catch (DuplicateMemberException e) {
log.error("회원가입 실패 : 이미 존재하는 회원입니다.");
result.rejectValue("email", "duplicate.email", "이미 존재하는 회원입니다.");
return "signup";
}
}
-LoginController
@PostMapping("/login")
public String postHomePage(@Valid LoginForm loginForm, BindingResult result, HttpServletRequest request, Model model) {
if (result.hasErrors()) {
log.error("로그인 오류 : 회원정보를 다시 확인해주세요.");
return "login";
}
Member findMember = memberRepository.findByEmail(loginForm.getEmail());
if (findMember == null) {
log.error("로그인 실패 : 존재하지 않는 이메일입니다.");
model.addAttribute("loginError", "로그인 실패, 아이디 또는 비밀번호를 다시 확인해주세요.");
return "login";
}
//Validation 검증
//검증 실패시
if (!memberService.authenticateUser(loginForm.getEmail(), loginForm.getPassword())) {
log.error("로그인 실패 : 아이디 또는 비밀번호가 일치하지 않습니다.");
model.addAttribute("loginError", "로그인 실패, 아이디 또는 비밀번호를 다시 확인해주세요.");
return "login";
}
//검증 성공
log.info("로그인 성공");
//세션 처리 및 저장
memberService.processLoginSuccess(request,findMember);
log.info("홈 화면으로 이동합니다");
return "home/home";
}
로그인 성공시 -> 홈 화면으로 이동
로그인 실패시 -> 로그인 화면으로 리다이렉트 & Validaition 적용