[Spring Security] 인증 간 요청 저장
🔐 스프링 시큐리티
🗂️ RequestCache
인증이 필요한 서비스에 접근하려 할 때, 사용자가 아직 로그인하지 않은 상태라면 로그인 페이지로 리다이렉트된다. 로그인이 성공하면 원래 요청했던 페이지로 돌아가야 한다.
이처럼, 인증이 필요한 자원에 대한 요청을 일시적으로 저장했다가, 인증후 다시 요청해야하는 경우가 발생한다.
스프링 시큐리티는 이러한 상황을 해결하기 위해 RequestCache 인터페이스를 제공한다.
RequestCache는 HttpServletRequest 객체를 저장하고 필요에 따라 다시 꺼내는 역할을 한다.
기본적인 구현체로 HttpSessionRequestCache가 사용된다.
🌊 RequestCache 인증 흐름도
graph TD
A[시작] --> B{인증 필요?}
B -->|예| C[ExceptionTranslationFilter]
C --> D[RequestCache에 HttpServletRequest 저장]
D --> E[로그인 페이지로 리다이렉트]
E --> F[사용자 로그인]
F --> G{인증 성공?}
G -->|예| H[RequestCacheAwareFilter]
H --> I[RequestCache에서 저장된 요청 검색]
I --> J[원래 요청 재실행]
J --> K[종료]
B -->|아니오| K
G -->|아니오| E
subgraph RequestCache 처리
D
I
end
1. 시작점에서 인증이 필요한지 확인한다.
2. 인증이 필요한 경우:
ExceptionTranslationFilter가 작동한다.HttpServletRequest를RequestCache에 저장한다.- 사용자를 로그인 페이지로 리다이렉트한다.
3. 사용자가 로그인을 시도한다.
4. 인증이 성공하면:
RequestCacheAwareFilter가 작동한다RequestCache에 저장된 원래 요청을 가져온다.- 원래 요청을 재실행한다.
5. 인증이 실패하면 다시 로그인 페이지로 돌아간다.
6. 인증이 필요없거나 프로세스가 완료되면 종료된다.
참고
Leave a comment