-
[Numble 챌린지] Spring으로 타임딜 서버 구축하기 - 로그인 세션 구현Project 2023. 3. 6. 09:05
회원 기능의 마지막인 로그인을 구현해보자.
이번 프로젝트에서 로그인 방식은 세션 방식으로 진행된다.
세션 방식을 구현하는 방법은 여러 가지다.
- 직접 ConcurrentHashMap<>()을 사용
- AtomicLong 사용
- 서블릿이 공식 지원하는 세션 사용
세션을 직접 만드는 경우
- 세션 생성
- sessionId 생성
- 세션 저장소에 sessionId와 보관할 값 저장(ConcurrentHashMap)
- sessionId로 응답 쿠키를 생성해서 클라이언트에 전달
- 세션 조회
- 클라이언트가 요청한 sessionId 쿠키 값으로 세션 저장소에 보관한 값 조회
- 세션 만료
- 클라이언트가 요청한 sessionId 쿠키 값으로 세션 저장소에 보관한 sessionId와 값 제거
서블릿을 사용한 세션(1)
- HttpSession 사용
- HttpSession도 위에서 만든 역할과 같은 역할 수행
- HttpSession 생성시 JSESSIONID라는 쿠키 생성
서블릿을 사용한 세션(2)
@SessionAttribute 사용
이번에는 대중적인 서블릿을 사용한 세션(1)로 구현해 보도록 하자.
Controller
@PostMapping("login") public ResponseEntity<?> login(HttpServletRequest request, @RequestBody LoginRequestDto loginRequestDto) { return memberService.login(request, loginRequestDto); } @PostMapping("logout") public ResponseEntity<?> logout(HttpServletRequest request) { HttpSession session = request.getSession(false); if (session != null) { session.invalidate(); } return ResponseEntity.success("로그아웃 되었습니다."); }
Service
public ResponseEntity<?> login(HttpServletRequest request, LoginRequestDto loginRequestDto) { if (!validatorMember(loginRequestDto.getMemberId())) { return ResponseEntity.fail("회원 정보가 없습니다."); } Optional<Member> member = memberRepository.findByMemberId(loginRequestDto.getMemberId()); if (member.get().getPassword() != loginRequestDto.getPassword()) { return ResponseEntity.fail("비밀번호를 틀렸습니다."); } // 로그인 성공 처리 // 세션이 있으면 있는 세션 반환, 없으면 신규 세션 생성 HttpSession session = request.getSession(); // 세션에 로그인 회원 정보 보관 session.setAttribute("LOGIN_MEMBER", new MemberResponseDto(member)); log.info(String.format("로그인 정보 확인 : memberId = %s", member.get().getMemberId())); return ResponseEntity.success("로그인 성공"); }
간단하게? 구현해보도록 했다. 다음에 기회되면 위에 언급한 다른 방식의 구현 방법도 직접 해 보도록 하자.
'Project' 카테고리의 다른 글
[Numble 챌린지] Spring으로 타임딜 서버 구축하기 - Cloud DB for MySQL 생성 후 접 (0) 2023.03.09 [Numble 챌린지] Spring으로 타임딜 서버 구축하기 - 상품 등록 (0) 2023.03.08 [Numble 챌린지] Spring으로 타임딜 서버 구축하기 - nGrinder 설치(Guide) (0) 2023.03.05 [Numble 챌린지] Spring으로 타임딜 서버 구축하기 - 회원 삭제 (0) 2023.03.04 [Numble 챌린지] Spring으로 타임딜 서버 구축하기 - 회원조회 (0) 2023.03.03