[Spring Boot] Session / 세션 저장, 삭제 / 로그인 / 로그아웃

seulki·2022년 12월 1일
0

[springboot]

목록 보기
17/27

🎈 세션의 키값을 한 곳에 정의만 하는 클래스 생성

  • 키값이 혼동되거나 , 까먹었을 때 파일을 뒤져가며 찾기보다, 클래스로 접근하는 것이 편하다.
public static final String LOGIN_MEMBER = "loginMember";



🗝️ 로그인 후 아이디 세션에 저장하기

  • LoginController.java
@PostMapping("/login") // 세션에 담아주기
public String loginv2(@ModelAttribute LoginForm form, Model model,
	RedirectAttributes redirectAttributes , HttpServletRequest request) {
		Member loginMember = loginService.login(form.getLoginId(), form.getPassword());
		
		System.out.println(loginMember);
		
		if( loginMember == null) {
			// 로그인실패
			model.addAttribute("msg", "로그인실패");
			return "login/loginForm";
		}
		// 로그인 성공
		HttpSession session = request.getSession();
		//세션에 로그인 회원정보 보관
		session.setAttribute(SessionConst.LOGIN_MEMBER, loginMember);
		
		redirectAttributes.addFlashAttribute("msg","로그인 성공");
		return "redirect:/";
	}


✨ 로그아웃 시 세션에서 아이디 삭제하기

  • request.getSession(true) - 세션이 있으면 기존 세션을 반환한다.
    세션이 없으면 새로운 세션을 생성해서 반환한다.

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

  • LoginController.java

@PostMapping("/logout")
	public String logoutv2(HttpServletRequest request) {
		//세션을 삭제
		HttpSession session = request.getSession(false); 
        // session이 null이 아니라는건 기존에 세션이 존재했었다는 뜻이므로
        // 세션이 null이 아니라면 session.invalidate()로 세션 삭제해주기.
		if(session != null) {
			session.invalidate();
		}
		return "redirect:/";
	}


🎈 홈컨트롤러에서 세션 값 꺼내기 -> session.getAttribute() 사용

  • HomeController.java
@GetMapping
public String homev3(HttpServletRequest request, Model model) {
		//세션 반환
		HttpSession session = request.getSession(false);
		
		// 로그인한 사용자가 아니라면 home으로 보낸다.
		if ( session == null) {
			return "home";
		}
		
		Member loginMember = (Member)session.getAttribute(SessionConst.LOGIN_MEMBER);
		// 사용자가 없으면 null 처리 필요
        // 세션은 있지만 loginMember객체가 null이라면
		if(loginMember == null) {
			return "home";
		}
		
		// loginHome : 로그인에 성공한 사람만이 볼 수 있는 화면
		model.addAttribute("member", loginMember);
		return "loginHome";		
	}


✨ 홈컨트롤러에서 세션 값 꺼내기 -> @SessionAttribute

  • 세션객체에서 키값으로 값을 찾아와서 Member 객체에 담아준다.
  • HomeController.java
@GetMapping
	public String homev4(@SessionAttribute(name=SessionConst.LOGIN_MEMBER,required=false)Member loginMember, Model model) {
		// session attribute를 뒤져서 member에 값을 넣어준다.
		
		// 사용자가 없으면 null 처리 필요
		if(loginMember == null) {
			return "home";
		}
		
		// loginHome : 로그인에 성공한 사람만이 볼 수 있는 화면
		model.addAttribute("member", loginMember);
		return "loginHome";		
	}


👌 session time out

  • 설정 방법(application.properties)
    server.servlet.session.timeout=시간
    -> 시간 : 초단위, 기본은 1800초(30분), 분단위로 설정, 60초 보다 작은 값은 안된다. (최소 1분)
profile
웹 개발자 공부 중

0개의 댓글