session
쿠키만을 이용하여 로그인을 진행하는 경우 보안적으로 문제(쿠키의 조작 가능성, 쿠키 탈취 가능성, 탈취된 쿠키 평생 이용 가능성)가 발생할 수 있다. 따라서 이를 보완하고자 session을 사용한다.
session 로직
client 로그인 → server
server는 로그인을 위해 전달된 정보를 통해 사용자를 확인하고 session ID와 value를 session 저장소에 저장한다.
server → client
사용자를 확인하고 세션을 세션 저장소에 저장하면 server는 set-cookie 헤더에 session ID를 설정하여 응답을 보낸다.(쿠키 전달)
client → server
쿠키를 받은 후 client(브라우저)는 요청을 보낼 때 마다 cookie 헤더를 이용하여 서버로 이전에 저장했던 모든 쿠키(session ID)들을 함께 전송합니다.
// true가 default이다
// 세션이 있는 경우 해당 세션 객체를 return 하고 없을 경우 session을 생성한다.
HttpSession session = request.getSession();
HttpSession session = request.getSession(true);
// 세션이 있는 경우 해당 세션 객체를 return 하고 없을 경우 null을 return 한다.
HttpSession session = request.getSession(false);
// ex. 로그인 회원 정보를 저장한다
session.setAttribute(SessionConst.LOGIN_MEMBER, loginMember);
.of(value)
null이 아닌 객체를 담고 있는 Optional 객체를 생성한다.
.empty()
null인 객체를 담는 Optional 객체를 생성한다.
.ofNullable(value)
null인지 아닌지 알 수 없는 객체를 담는 Optional 객체를 생성한다.
.orElse(v)
null이면 v를 반환한다.
.orElseGet(func())
null이면 func()의 반환값을 반환한다.
.orElse(func()) VS .orElseGet(func())
.orElse는 null이 아니여도 func()을 수행하지만 .orElseGet은 null인 경우에만 func()을 수행한다.