HttpServletRequest.getSession(default == true) - request.getSession(true) : 세션이 있으면 기존 세션 반환 세션이 없으면 새로운 세션을 생성해서 반환 - request.getSession(false) : 세션이 있으면 기존 세션 반환 : 세션이 없으면 null을 반환 - 기존 세션의 여부는 JSESSIONID로 구분합니다. session저장소에 JSESSIONID와 매칭되는 세션이 존재하는지! * JSESSIONID : 톰캣 컨테이너에서 세션을 유지하기 위해 발급하는 키. 로그인 구현 @Controller @RequiredArgsConstructor public class MemberController { private final MemberSe..

전체 글
세션을 이용한 로그인의 동작원리 1. 인증에 성공했을 때 세션생성(SessionStore에 Map(SessionId, Session)의 형태로 관리 2. 세션에 Map("LOGIN_MEMBER", loginObject)의 형태로 저장 3. response에 sessionId가진 쿠키("JSESSION_ID", sessionId)를 담아 반환 4. 클라이언트는 자원 요청시 쿠키를 가지고 접근 5. 쿠키에 담긴 세션아이디가 서버의 저장소에 존재한다면 세션객체 반환 6. 세션에서 "LOGIN_MEMBER"에 매칭되는 loginObject 반환 -> 이렇게 반환 받은 로그인 객체를 이용하여 인증을 유지합니다. 구현 세션의 이해를 돕기위해 직접 Session을 관리하는 SessionManager클래스를 구현해 로..
세션 인증의 동작원리 세션인증은 다음과 같은 방법으로 이루어집니다. 1. 로그인요청 2. 로그인 성공 시 세션발급(사용자 정보 저장) 3. 해당 세션에 매핑되는 세션id를 쿠키에 심어 클라이언트 측에 전달 4. 자원 접근(이 세션id를 가지고 접근한다면 로그인 상태 유지) 즉 로그인 이후에는 세션을 통해 로그인 상태를 유지합니다. 따라서 이 세션id를 공유한다면 같은 사용자임을 보장받을 수 있습니다. 세션 고정 취약점( + 고정 보호) 제가 이번 포스팅에 설명할 내용은 세션고정 취약점입니다. * 세션 고정이란 로그인 시 발급받은 세션 ID값이 로그인 전 후 모두 동일하게 사용되는 것입니다. 이렇게 되면 다음과 같은 문제가 발생할 수 있습니다. 해커는 웹(Target)서버에 접근하여 정상 세션을 발급받는다..