쌓고 쌓다
세션 사용하기 본문
SessionConst
package com.example.demo.session;
public class SessionConst {
public static final String LOGIN_MEMBER = "loginMember";
}
HttpSession에 데이터를 보관하고 조회할 때, 자주 사용되므로 상수를 정의하여 사용할 수 있다.
신규 세션 등록
@GetMapping("kakao/test")
public String kakaoOauth(HttpServletRequest request) {
//로그인 후. Member 반환
Member member = kaKaoUser.login(token.get("access_token"));
HttpSession session = request.getSession();
session.setAttribute(SessionConst.LOGIN_MEMBER, member);
return "redirect:/";
}
- request.getSession(true) : getSession()과 동일
- 세션이 있으면 기존 세션을 반환
- 세션이 없으면 새로운 세션을 생성해서 반환
- request.getSession(false)
- 세션이 있으면 기존 세션을 반환
- 세션이 없으면 새로운 세션을 생성하지 않고 null을 반환한다.
- session.setAttribute : 세션에 로그인 회원의 정보인 member를 저장
세션 삭제
@GetMapping("/logout")
public String logout(HttpServletRequest request) {
HttpSession session = request.getSession(false);
if(session!=null) {
session.invalidate();
}
return "redirect:/";
}
- session.invalidate()로 세션을 제거
세션 조회
@GetMapping("/")
public String home(HttpServletRequest request, Model model) {
HttpSession session = request.getSession(false);
if(session==null) {
return "home";
}
Member loginMember = (Member)session.getAttribute(SessionConst.LOGIN_MEMBER);
if(loginMember==null) {
return "home";
}
model.addAttribute("member", loginMember);
return "loginHome";
}
- request.getSession(false)
- getSession(true)로 하면 로그인하지 않은 사용자에게 의미 없는 세션이 생성된다.
- 세션을 찾는 과정에서는 false로 세션을 생성하지 않도록 해야한다.
- session.getAttribute
- 세션 생성시 보관한 회원 객체를 찾는다.
@SessionAttribute 사용
스프링에서 세션을 더 편리하게 사용할 수 있도록 어노테이션을 지원한다.
이미 로그인된. 즉 세션을 가진 사용자를 조회할 때 아래와 같이 사용하자. 이 코드는 세션을 생성하지 않는다.
@SessionAttribute(name=SessionConst.LOGIN_MEMBER, required = false) Member loginMember
@GetMapping("/")
public String home(@SessionAttribute(name=SessionConst.LOGIN_MEMBER, required = false) Member loginMember, Model model) {
if(loginMember==null) {
return "home";
}
model.addAttribute("member", loginMember);
return "loginHome";
}
첫 로그인시 아래의 URL처럼 jsessionid를 포함할 수 있으므로 아래의 설정을 추가해주자.
application.properties
server.servlet.session.tracking-modes=cookie
'프로그래밍 > spring' 카테고리의 다른 글
[스프링 부트] Form 전송 객체 분리(검증 달리하기) - 30 (0) | 2023.09.14 |
---|---|
Bean Validation의 에러 메시지(코드) 변경 (0) | 2023.09.12 |
[스프링 부트] BeanValidation 적용 - 29 (0) | 2023.09.11 |
[스프링 부트] 모든 요청 로그 남기기(필터) - 28 (0) | 2023.09.10 |
서블릿 필터 (0) | 2023.09.10 |
Comments