이번에는 로그인 기능을 개발해 봤다.
로그인의 핵심 기능은 회원을 조회하고 파라미터로 넘어온 password와 비교해 같으면 회원을 반환하고 다르면 null을 반환하는 것이 로그인의 핵심 비즈니스 로직이라고 한다.
Optional<Member> findMemberOptional = memberRepository.findByLoginId(loginId);
Member member = findMemberOptional.get();
if (member.getPassword().equals(password)) {
return member;
} else {
return null;
}
Optional을 통해 이렇게 서비스 로직을 작성했는데 강사님이 비추하고 람다식으로 코드를 작성하는 것을 추천하셨다. 그렇게 작성한 코드가 아래와 같다.
return memberRepository.findByLoginId(loginId)
.filter(m -> m.getPassword().equals(password))
.orElse(null);
매우 간단해졌다. filter와 stream 사용법은 잘 알아두는 게 좋다고 했다.
지금 이 서비스 로직이 핵심인데 회원을 조회하고 다음에 파라미터로 넘어온 password와 비교해 같으면 회원을 반환하고 아니면 null을 반환하도록 하였다.
이렇게 서비스 로직을 완성하고 다음으로 넘어간다.
@NotEmpty
private String loginId;
@NotEmpty
private String password;
이번에는 로그인 아이디와 비밀번호를 위해 객체를 만들어 주었다.
@Data 어노테이션을 활용해 만들어 주었다.
@GetMapping("/login")
public String loginForm(@ModelAttribute("loginForm") LoginForm form) {
return "login/loginForm";
}
컨트롤러 코딩이다. GetMapping과 PostMapping을 나누어 적용했다.
@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";
}
//로그인 성공 처리 TODO
return "redirect:/";
}
저번에 배운 검증 로직까지 추가했다.
로그인 컨트롤러는 로그인을 서비스를 호출하고 성공하면 홈 화면으로 실패하면 bindingResult.reject()를 통해 글로벌 오류ObjectError를 생성하고 다시 정보를 입력하도록 로그인 폼을 뷰 템플릿으로 사용했다.
로그인 폼 뷰 템플릿에서 loginId와 password가 틀리면 글로벌 오류가 나타나게 된다.
이렇게 코딩하고 실행하면 로그인이 성공하면 홈으로 이동되고, 로그인에 실패하면 검증 오류가 뜨게 된다. 강의 특성상 이것을 업그레이드해 나갈 것 같다.
스프링 MVC 2편 - 백엔드 웹 개발 활용 기술을 참고하여 공부하였습니다.
'Framework & Library > Spring Boot' 카테고리의 다른 글
[Spring Boot] : Cookie 보안 문제와 대처 방안 (0) | 2022.02.18 |
---|---|
[Spring Boot] : Cookie와 로그아웃 구현하기 (0) | 2022.02.18 |
[Spring Boot] : 회원 가입 기능 구현하기 (0) | 2022.02.17 |
[Spring Boot] : Bean Validation HTTP message Converter (0) | 2022.02.17 |
[Spring Boot] : Form 전송 객체 분리하여 개발하기 (0) | 2022.02.17 |
댓글