mini_project/회원가입, 로그인 구현하기

[servlet] 세션(session)생성 "HttpSession"

개발자 배찌 2021. 12. 14. 17:36
728x90

서블릿이 제공하는 "HttpSession"

1. 세션 생성

request.getSession(true)

● request.getSession(true) : 세션이 있으면 기존세션반환, 세션이 없으면 새로운 세션을 생성해서 반환.

● request.getSession(false) : 세션이 있으면 기존세션반환, 세션이 없으면 새로운 세션 생성 하지않고 null  반환.

 

기본값은 true이다.

 

2. 세션에 로그인 회원 정보 보관

session.setAttribute(SessionConst.LOGIN_MEMBER, loginMember);

 

 

코드로 확인하기 !!!!

 

LoginForm.java

import lombok.Data;
import javax.validation.constraints.NotEmpty;

@Data
public class LoginForm {
     @NotEmpty
     private String loginId;
     @NotEmpty
     private String password;
}

SessionConst.java       

>> httpSession에 데이터를 보관하고 조회할 떄, 같은 이름이 중복되어 사용되므로, 상수를 하나 정의했다.

public class SessionConst {
      public static final String LOGIN_MEMBER = "loginMember";
}

 

LoginController.java

@PostMapping("/login")
public String login(@Valid @ModelAttribute LoginForm form, BindingResult bindingResult, HttpServiletRequest 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:/";
}

 

세션이 유지되어 있으면 "로그인된 home"으로 이동.

세션이 유지되어있지 않으면 "로그인 되어있지 않는 home"으로 이동

HomeController.java

@GetMapping("/")
public String homeLogin(HttpServletRequest request, Model model){

       //세션이 없으면 "로그인 되어있지 않는 home"으로 이동
       HttpSession session = request.getSession(false);   //false옵션을 사용해서 세션을 생성하지 않아야 함.
       if (session == null) {
           return "home";
        }

       Member loginMember = (Member) session.getAttribute(SessionConst.LOGIN_MEMBER);

       // 세션에 회원데이터가 없으면 "로그인 되어있지 않는 home"으로 이동
      if (loginMember == null) {
                return "home";
      }

      //세션이 유지되어 있으면 "로그인된 home"으로 이동.
      model.addAttribute("member", loginMember);
      return "loginHome";
}