@PostMapping("/login")
public String loginV3(@Valid @ModelAttribute LoginForm form, BindingResult bindingResult, HttpServletRequest request) {
if (bindingResult.hasErrors()) {
return "login/loginForm";
}
Member loginMember = loginService.login(form.getLoginId(), form.getPassword());
if (loginMember == null) {
bindingResult.reject("loginFail", "아이디 또는 비밀번호가 맞지 않습니다.");
return "login/loginForm";
}
// 로그인 성공처리
// 세션이 있으면 있는 세션 반환, 없으면 신규 세션 생성
HttpSession session = request.getSession();
//세션에 로그인 회원 정보를 보관
session.setAttribute(SessionConst.LOGIN_MEMBER, loginMember);
// 세션 관리자를 통해 세션 생성, 회원 데이터 보관
return "redirect:/";
}
@Valid
로그인을 하기 위해서는 ID, PW 입력이 필요하다. 입력을 받을 때 공백을 방지하기 위한 @NotEmpty를 따로 정의 해두었기 때문에 이를 검증하기 위해 필요하다.
@ModelAttrute
LoginForm에는 loginId, password가 들어가있다. 이 폼을 모델에 담아서 뷰로 전달해야 하기때문에 이를 전달하기 위해 필요하다.
LoginForm form
Form에는 loginId, password를 같이 전송한다.
BindingResult bindingresult
오류를 담고 처리하기 위해 필요하다.
HttpServletRequest request
Http 요청을 할 때 쿠키 저장소에서 세션ID가 들어가있는 쿠키를 서버로 전달하기 때문에 요청에서 세션 정보를 빼내야 한다. 이를 위해 요청도 받아야 한다.
1. 우선 로그인을 먼저 처리한다. 로그인 시 공백이 있거나 아예 empty 값이면 에러 메시지를 먼저 보내야 하기 때문에 bindingResult를 통해 에러 메시지를 보낸다.
2. ID, PW를 양식에 맞게 했다면 form 객체에 ID, PW가 담겨져 있기 때문에 폼에서 ID, PW를 가져와서 LoginService 클래스의 login 메서드를 통해서 memberRepository에서 해당 ID, PW를 가진 멤버 객체가 있는지 확인한다. 만약 그 멤버 객체(loginMember)가 null이면 ID, PW를 잘못 입력한 것이므로 맞지 않다는 메시지를 보내준다.
3. 로그인이 성공적으로 되면 request에서 세션값이 있으면 그 세션을 통해 멤버 객체를 보관한다.
로그아웃
@PostMapping("/logout")
public String logoutV3(HttpServletRequest request) {
HttpSession session = request.getSession(false);
if (session != null) {
session.invalidate(); // 세션과 그 안에 있는 데이터가 다 날아감
}
return "redirect:/";
}
HttpServletRequest request
로그아웃을 하면 세션 데이터를 다 지워야 하기 때문에 request.getSession(false)를 통해서 해당 세션이 있으면 안에 있는 데이터를 다 지운다.
출처 : 인프런 - 스프링 MVC 2편 (김영한)
'Spring > Spring' 카테고리의 다른 글
[Spring] @ServletComponentScan (0) | 2024.11.19 |
---|---|
[Spring] 필터를 이용한 로그인 처리 (0) | 2024.10.25 |
[Spring] 쿠키와 세션을 이용한 로그인 처리 (0) | 2024.10.22 |
[Spring] BindingResult / FieldError / ObjectError (2) | 2024.10.16 |
[Spring] 메시지, 국제화 (3) | 2024.10.15 |