반응형
로그인 처리하기 - 세션 직접 만들기
우선, Session ID를 만들어야 하는데 추정이 불가능하게 만들어 줘야 한다. 여기에 UUID를 사용한다.
클라이언트와 서버는 쿠키로 연결이 되어야 한다.
이번에는 세션을 직접 개발해서 적용을 해봤다. 세션 관리는 3가지 기능으로 제공되는데 세션 생성과 세션 조회, 세션 만료로 나누어진다.
@Component
public class SessionManager {
public static final String SESSION_COOKIE_NAME = "mySessionId";
private Map<String, Object> sessionStore = new ConcurrentHashMap<>();
@Component로 스프링 빈으로 자동 등록을 시켜주고 ConcurrentHashMap을 사용했다. HashMap은 동시 요청에 안전하지 않은 문제가 있다.
String sessionId = UUID.randomUUID().toString();
sessionStore.put(sessionId, value);
세션 아이디를 생성할 때 UUID를 사용해서 만들어주고 값을 세션에 저장해 줬다.
Cookie mySessionCookie = new Cookie(SESSION_COOKIE_NAME, sessionId);
response.addCookie(mySessionCookie);
그 다음에 쿠키를 생성해 주었고 이 후로는 세션을 조회, 완료 코드를 작성해 주면 된다.
public Object getSession(HttpServletRequest request) {
Cookie sessionCookie = findCookie(request, SESSION_COOKIE_NAME);
if (sessionCookie == null) {
return null;
}
return sessionStore.get(sessionCookie.getValue());
}
세션 조회 코드이다. 클라이언트가 요청한 sessionId 쿠키의 값으로 세션 저장소에 보관한 값을 조회한다.
public void expire(HttpServletRequest request) {
Cookie sessionCookie = findCookie(request, SESSION_COOKIE_NAME);
if (sessionCookie != null) {
sessionStore.remove(sessionCookie.getValue());
}
}
세션 완료 코드이다. 클라이언트가 요청한 sessionId 쿠키의 값으로 세션 저장소에 보관한 sessionId와 값을 제거한다.
테스트를 진행하려면 HttpServletRequest와 HttpServletResponse 객체를 직접 사용할 수 없어서 비슷한 역할을 해주는 MockHttpServletRequest, MockHttpServletResponse을 사용해야 한다.
스프링 MVC 2편 - 백엔드 웹 개발 활용 기술을 참고하여 공부하였습니다.
반응형
'Framework & Library > Spring Boot' 카테고리의 다른 글
[Spring Boot] : 서블릿 HTTP 세션을 활용해 로그인 처리하기(1) (0) | 2022.02.22 |
---|---|
[Spring Boot] : 직접 만든 세션 적용하여 로그인 처리하기 (0) | 2022.02.21 |
[Spring Boot] : Cookie 보안 문제와 대처 방안 (0) | 2022.02.18 |
[Spring Boot] : Cookie와 로그아웃 구현하기 (0) | 2022.02.18 |
[Spring Boot] : 로그인 기능 구현하기 (0) | 2022.02.17 |
댓글