공부할 것 !

사용자 정보 저장 및 사용 방법 ( 쿠키, 세션, 스프링시큐리티 )

sejin2 2024. 4. 21. 12:57

1. 쿠키 저장 방법

쿠키는 클라이언트측에 저장되는 가장 작은 데이터 조각을 말한다.  
서버는 HTTP 헤더를 통해 쿠키를 클라이언트에 전송하고, 이후 클라이언트는 모든 HTTP요청에 이 쿠키 정보를 포함시켜 다시 서버로 전송한다. 이를 통해 서버는 사용자를 식별하고 상태 정보를 유지할 수 있다. 

쿠키 생성 및 설정 예시

Cookie cookie = new Cookie("userId", "user123");
cookie.setMaxAge(60*60*24*7);     // 1주일 동안 유효
response.addCookie(cookie);       // 응답에 쿠키 추가

2. 세션 저장 방법

세션은 서버 측에서 관리되는 저장공간이다. 
서버는 각 클라이언트에 대해 세션ID를 생성하여 쿠키를 통해 클라이언트에 전달한다.
클라이언트는 이 세션ID를 사용하여 서버에 접속할 때 마다 자신을 인증하고, 서버는 이 ID를 기반으로 사용자의 상태 정보를 관리한다.

세션 사용 예시
사용자가 로그인을 하면 서버는 사용자의 정보, 권한 정보 등을 세션에 저장한다.
사용자가 사이트를 방문하여 페이지에 들어갈 때 마다 이 세션 정보를 사용해 사용자에게 화면을 보여준다.

HttpSession session = request.getSession();
session.setAttribute("loggedInUser", userObject);

3. 스프링 시큐리티

3-1. 컨트롤러에서 모델을 통한 데이터 전달

컨트롤러에서 인증 객체를 가지고와 모델에 추가하고, 이 모델을 JSP로 전달하여 사용한다.

public class UserController {

    @GetMapping("/user/profile")
    public String userProfile(Model model) {
        Authentication auth = SecurityContextHolder.getContext().getAuthentication();
        String username = auth.getName(); // 사용자 이름 가져오기
        model.addAttribute("username", username);
        return "profile";
    }
}

그러면 이제 JSP에서 아래와 같이 사용할 수 있다. 

<p>Username: ${username}</p>

3-2. 스프링 시큐리티 태그 라이브러리 사용 <sec:authentication> 

JSP 상단에 태그 라이브러리를 선언하고 사용해준다. 

<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>

<p>Username: <sec:authentication property="name" /></p>
<p>Authorities: <sec:authentication property="authorities" /></p>

위와 같이 <sec:authentication> 태그를 이용하여 현재 인증된 사용자의 다양한 속성을 직접 사용할 수 있다. 

+ 스프링 시큐리티에서 Principal은 현재 인증된 사용자의 정보를 나타내는 객체이다.
Principal 객체는 사용자의 아이디, 이름, 권한 등의 정보를 포함하고 있으며, 인증과정에서 생성되어 인증이 유지되는 동안 계속 접근이 가능하다.
스프링 시큐리티에서는 Authentication 객체 안에 Principal이 포함되어 있으며, 이 객체는 SecurityContextHolder를 통해 어디서든 접근이 가능하다. 

 

 

'공부할 것 !' 카테고리의 다른 글

HTTP 메서드의 이해와 활용  (0) 2024.05.12
NoSQL  (0) 2024.05.08
아스키 코드  (0) 2024.05.08
QueryDSL의 주요 기능 ( BooleanExpression, BooleanBuilder, OrderSpecifier)  (0) 2024.04.21
[JPA] QueryDSL  (0) 2024.04.13