인증과 인가 (3) : 쿠키와 세션 다루기

이민호·2024년 5월 23일
0

지난 포스트에서 다뤘던 쿠키와 세션을 어떻게 코드로 구현하는 지 작성해볼 예정이다.

쿠키

쿠키 생성

public static void addCookie(String cookieValue, HttpServletResponse res) {
    try {
        cookieValue = URLEncoder.encode(cookieValue, "utf-8").replaceAll("\\+", "%20"); // Cookie Value 에는 공백이 불가능해서 encoding 진행

        Cookie cookie = new Cookie(AUTHORIZATION_HEADER, cookieValue); // Name-Value
        cookie.setPath("/");
        cookie.setMaxAge(30 * 60);

        // Response 객체에 Cookie 추가
        res.addCookie(cookie);
    } catch (UnsupportedEncodingException e) {
        throw new RuntimeException(e.getMessage());
    }
}
  • new Cookie(AUTHORIZATION_HEADER, cookieValue)
    • AUTHORIZATION_HEADER : 쿠키의 이름
    • cookieValue : 쿠키의 값
  • cookie.setPath("/") : 쿠키의 Path
  • cookie.setMaxAge(30 * 60) : 쿠키 만료시간 지정
  • res.addCookie(cookie) : res = HttpServletResponse 객체에 Cookie 객체를 추가

쿠키 읽기

@GetMapping("/get-cookie")
public String getCookie(@CookieValue(AUTHORIZATION_HEADER) String value) {
    System.out.println("value = " + value);

    return "getCookie : " + value;
}
  • @CookieValue(AUTHORIZATION_HEADER) String value
    • AUTHORIZATION_HEADER 값에 해당하는 cookieValue를 반환한다.

세션

jakarta.Servlet에서 세션을 간편하게 다룰수 있는 HttpSession을 제공

세션 생성

@GetMapping("/create-session")
public String createSession(HttpServletRequest req) {
    // 세션이 존재할 경우 세션 반환, 없을 경우 새로운 세션을 생성한 후 반환
    HttpSession session = req.getSession(true);

    // 세션에 저장될 정보 Name - Value 를 추가합니다.
    session.setAttribute(AUTHORIZATION_HEADER, "Robbie Auth");

    return "createSession";
}
  • HttpServletRequest를 사용하여 세션을 생성 및 반환할 수 있다.
  • req=HttpServletRequest.getSession(true)
    • 세션이 존재할 경우 세션을 반환하고 없을 경우 새로운 세션을 생성.
  • 세션에 저장할 정보를 Name-Value 형식으로 추가.

세션 읽기

@GetMapping("/get-session")
public String getSession(HttpServletRequest req) {
    // 세션이 존재할 경우 세션 반환, 없을 경우 null 반환
    HttpSession session = req.getSession(false);

    String value = (String) session.getAttribute(AUTHORIZATION_HEADER); 
    // 가져온 세션에 저장된 Value 를 Name 을 사용하여 가져옵니다.
    System.out.println("value = " + value);

    return "getSession : " + value;
}
  • req=HttpServletRequest.getSession(false)
    • 세션이 존재할 경우 세션을 반환하고 없을 경우 null을 반환.
  • session.getAttribute(”세션에 저장된 정보 Name”)
    • Name을 사용하여 세션에 저장된 Value를 반환.
profile
둘뺌

0개의 댓글