Cookie를 이용해 인증 정보를 관리할 때 Spring에서는 HttpServletRequest와 HttpServletResponse를 사용할 수 있다.
HttpServletRequest를 이용하면 클라이언트가 보낸 Header와 Cookie를 확인할 수 있고, HttpServletResponse를 이용하면 서버의 응답에 Cookie를 추가할 수 있다.
1. HttpServletRequest와 HttpServletResponse
Controller에서 두 객체를 주입받아 사용할 수 있다.
private final HttpServletRequest request;
private final HttpServletResponse response;
| 객체 | 역할 |
| HttpServletRequest | 클라이언트의 요청 정보 확인 |
| HttpServletResponse | 서버의 응답 정보 설정 |
인증에서는 주로 request를 이용해 인증 정보를 가져오고, 로그인이나 로그아웃에서는 response를 이용해 Cookie를 설정한다.
2. Authorization Header에서 API Key 가져오기
Authorization Header를 사용하는 경우 다음과 같이 인증 정보를 가져올 수 있다.
String authorization = request.getHeader("Authorization");
if (authorization == null || !authorization.startsWith("Bearer ")) {
throw new ServiceException(
"401-2",
"헤더의 인증 정보 형식이 올바르지 않습니다."
);
}
String apiKey = authorization.replace("Bearer ", "");
요청이 다음과 같이 전달됐다고 가정한다.
Authorization: Bearer API_KEY
getHeader("Authorization")으로 Header의 값을 가져온 후 Bearer 를 제거하면 실제 API Key를 얻을 수 있다.
3. Cookie에서 API Key 가져오기
Cookie 방식에서는 request.getCookies()를 이용해 요청에 포함된 Cookie를 확인한다.
Cookie[] cookies = request.getCookies();
String apiKey = null;
if (cookies != null) {
for (Cookie cookie : cookies) {
if (cookie.getName().equals("apiKey")) {
apiKey = cookie.getValue();
break;
}
}
}
여러 Cookie 중 이름이 apiKey인 Cookie를 찾고 해당 값을 가져온다.
가져온 API Key를 이용하면 서버에서 회원을 조회하여 인증할 수 있다.
4. Cookie 생성하기
로그인에 성공하면 HttpServletResponse를 이용해 API Key를 Cookie에 저장할 수 있다.
Cookie cookie = new Cookie("apiKey", actor.getApiKey());
cookie.setPath("/");
cookie.setHttpOnly(true);
response.addCookie(cookie);
response.addCookie()를 호출하면 서버의 응답에 Cookie가 포함된다.
브라우저는 응답으로 받은 Cookie를 저장하고, 이후 해당 조건에 맞는 요청을 보낼 때 Cookie를 자동으로 전송한다.
HttpOnly
cookie.setHttpOnly(true);
HttpOnly를 설정하면 JavaScript에서 해당 Cookie에 직접 접근할 수 없도록 제한한다.
따라서 인증 정보를 Cookie에 저장할 때 XSS 공격으로 인증 Cookie가 JavaScript를 통해 직접 탈취되는 위험을 줄이는 데 도움이 된다.
5. Cookie 삭제하기
로그아웃할 때는 Cookie의 만료 시간을 0으로 설정하여 삭제할 수 있다.
Cookie cookie = new Cookie("apiKey", "");
cookie.setPath("/");
cookie.setHttpOnly(true);
cookie.setMaxAge(0);
response.addCookie(cookie);
setMaxAge(0)을 설정하면 브라우저가 해당 Cookie를 즉시 삭제하도록 한다.
Cookie를 생성할 때 설정했던 Path 등의 조건도 동일하게 맞춰주는 것이 중요하다.
6. Cookie 인증의 전체 흐름
Cookie를 이용한 인증은 다음과 같은 과정으로 동작한다.
로그인 요청
↓
아이디·비밀번호 확인
↓
API Key 확인
↓
API Key를 Cookie에 저장
↓
로그인 완료
↓
인증이 필요한 API 요청
↓
브라우저가 Cookie 자동 전송
↓
서버에서 Cookie의 API Key 확인
↓
회원 조회
↓
인증 완료
Cookie를 이용하면 프론트엔드에서 매번 API Key를 꺼내 Authorization Header에 직접 넣지 않아도 된다.
'BackEnd > Spring' 카테고리의 다른 글
| [Postman] API Key 변수 관리와 Authorization Header 활용하기 (0) | 2026.09.02 |
|---|---|
| [Spring] 로그인 기능 구현하기 (0) | 2026.09.02 |
| [Spring] API Key를 이용한 인증 처리 (0) | 2026.09.01 |
| [Spring] 예외 처리 | ServiceException과 전역 예외 처리 (0) | 2026.09.01 |
| Spring Boot 프로젝트 Railway 배포하기 + 배포 과정에서 발생한 오류 해결 (0) | 2026.08.27 |
댓글