👩🏻🦰 로그인 페이지에서 ID와 PW를 서버로 전송했을 때, 서버에서 로그인을 처리하는 로직의 위치를 파악하고, 로그인 한 이후로 이 상태가 유지되어야 한다!
먼저 HTTP에 대해 알아보자!
서버의 메모리, 데이터 베이스와 같은 서버 자원을 사용해서 사용자의 정보를 유지한다.
👍🏻 장점
토큰 방식은 사용자가 로그인을 하면 서버에서 발행해주는 토큰을 가지고
브라우저의 저장소에 토큰을 유지시키는 방법이다.
ex. JWT을 통한 로그인
👍🏻 장점
👩🏻🦰 중요 정보는 서버의 세션 저장소에 key/value로 저장한 뒤 브라우저에서는 key값만 가지고 있도록 하자!
public String login(LoginRequestDTO dto
, HttpServletRequest request
, HttpServletResponse response
)
LoginRequestDTO
를 통해 로그인에 필요한 정보를 클라이언트로부터 요청public class LoginRequestDTO {
private String id;
private String pwd;
private boolean autoLogin; //자동로그인 체크 여부
}
DTO의 id
를 통해 DB에 해당 사용자가 있는지 검색
있다면
HttpServletRequest
의 getSession()
을 통해 HttpSession
전달
a. key : LOGIN_KEY
, velue : 필요한 정보
b. 세션 시간 설정
session.setAttribute(LoginUtil.LOGIN_KEY, foundUser);
session.setMaxInactiveInterval(60 * 60 * 24); // 세션 - 1일
➡ Key 값을 통해 로그인한 사용자의 정보를 가져올 수 있습니다. 이를 통해 로그인 후에도 사용자 정보를 유지하고, 필요한 경우 세션을 통해 사용자 데이터를 조회할 수 있게 됩니다.
Cookie autoLoginCookie
= new Cookie(LoginUtil.AUTO_LOGIN_COOKIE, session.getId());
autoLoginCookie.setMaxAge(60 * 60 * 24); // 쿠키 사용 시간 (1일)
autoLoginCookie.setPath("/"); //전체경로 설정
// 쿠키 응답 전송
response.addCookie(autoLoginCookie);
// DB 유저 정보에 쿠키값 저장하기
AutoLoginDTO autoDTO = AutoLoginDTO.builder()
.sessionId(session.getId())
.id(dto.getId())
.cookieLimitTime(LocalDateTime.now().plusDays(30))
.build();
userMapper.saveAutoLogin(autoDTO);
➡ 세션 ID를 쿠키로 클라이언트에게 전송하고, 서버에서는 이 ID를 통해 세션을 식별하여 해당 유저의 정보를 로드한다.
[참조]
https://velog.io/@junghyeonsu/프론트에서-로그인을-처리하는-방법