우선 맴버를 정의 해준다( 로그인 아이디, 패스워드를 가짐)
package hello.login.domain.member;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
@Data
public class Member {
private Long id;
@NotEmpty
private String loginId; //로그인 아이디
@NotEmpty
private String name;
@NotEmpty
private String password;
}
@NotEmpty를 넣어 줌으로써 아이디 비밀번호의 공백을 방지해준다.
<MemberController>
@Controller
@RequiredArgsConstructor
@RequestMapping("/members")
public class MemberController {
private final MemberRepository memberRepository;
@GetMapping("/add")
public String addForm(@ModelAttribute("member") Member member){
return "members/addMemberForm";
}
@PostMapping("/add")
public String save(@Valid @ModelAttribute Member member, BindingResult bindingResult){
if (bindingResult.hasErrors()) {
return "members/addMemberForm";
}
memberRepository.save(member);
return "redirect:/";
}
}
아이디, 비밀번호, 이름을 받아서 회원가입 후 MemberRepository에 저장
로그인 구현
로그인 시 필요한 정보 정의
@Data
public class LoginForm {
@NotEmpty
private String LoginId;
@NotEmpty
private String password;
}
<LoginService>
@Service
@RequiredArgsConstructor
public class LoginService {
private final MemberRepository memberRepository;
/**
* @return null 로그인 실패
*/
public Member login(String loginId, String password){
return memberRepository.findByLoginId(loginId)
.filter(m ->m.getPassword().equals(password))
.orElse(null);
}
}
아이디, 패스워드를 입력받고 memberRepository에 입력받은 아이디로 등록된 회원이 존재하면 패스워드가 일치하는지 확인 후 로그인 성공
<LoginController>
@Slf4j
@Controller
@RequiredArgsConstructor
public class LoginController {
private final LoginService loginService;
@GetMapping("/login")
public String loginForm(@ModelAttribute("loginForm") LoginForm form){
return "login/loginForm";
}
@PostMapping("/login")
public String login(@Valid @ModelAttribute LoginForm form, BindingResult bindingResult){
if(bindingResult.hasErrors()){
return "login/loginForm";
}
Member loginMember = loginService.login(form.getLoginId(),form.getPassword());
if(loginMember == null){
bindingResult.reject("loginFail","아이디 또는 비밀번호가 잘못됨");
return "login/loginForm";
}
return "redirect:/";
}
}
로그인에 실패하면 다시 loginForm으로 이동, 성공시 홈화면으로 리다이렉트 수행
<실행화면>
'BackEnd > spring' 카테고리의 다른 글
@Controller와 @RestController의 차이점 (0) | 2025.02.23 |
---|---|
SpringBean (1) | 2025.02.11 |
BeanValidation-Form 전송 객체 분리 (0) | 2024.08.05 |
Bean Validation (0) | 2024.08.01 |
Validator 분리 (1) | 2024.07.31 |