🙋 들어가며
스프링 시큐리티 필터에는 다양한 필터들이 존재합니다.
오늘은 그중에서 인증, 인가를 위해서 가로채진 요청을 어떻게 다시 수행하는지 알아보겠습니다.
↩️ RequestCacheAwareFilter
이름에서 어떤 역할을 하는지 대략적으로 알 수 있습니다. 대충 요청에 대한 캐시를 알고 있는 필터 같습니다.
동작을 이해하기 위해서는 내부적으로 무엇을 가지고 있는지 알아야 합니다.
🏛️ 시큐리티 아키텍처
시큐리티는 결국 인증과 인가를 위한 프레임워크입니다.
인증을 위한 Authentication Manager
와 인가를 위한 Access Decision Manager
가 핵심입니다.
요청한 자원이 인증이 필요하다면 요청을 가로채 인증한 뒤 다시 원래 요청으로 되돌아가야 합니다.
시큐리티는 RequestCache
를 사용해서 HttpServletRequest를 원래 요청을 저장합니다.
💿 RequestCache
이 글의 목표인 RequestCacheAwareFilter는 RequestCache를 사용합니다.
인터페이스인 RequestCache는 기본적으로 HttpSessionRequestCache를 사용합니다.
예시를 위해서 인증이 필요한 '/mypage'라는 페이지로 접근해서 디버깅을 해보겠습니다.
HttpSessionRequestCache의 saveRequest()
로 요청이 타고 들어와 저장되는 것을 확인할 수 있습니다.
이후 인증에 성공하면 RequestCacheAwareFilter에서 getMatchingRequest()
를 사용해서 저장된 요청을 불러옵니다.
디버깅을 통해서 request에 들어있는 값은 우리가 요청했었던 '/mypage'임을 알 수 있습니다.
마지막으로 캐시에서 요청을 지우고 필터에서 사용할 수 있는 형태로 넘겨줍니다.
이후 그대로 필터 체인에 태워 보내면서 기존 요청을 수행하는 것을 알 수 있습니다.
😋 정리
이렇게 필터가 어떻게 동작하는지 알아봤습니다!
간단하게 정리하면 다음과 같습니다.
- RequestCacheAwareFilter는 기존의 요청으로 돌아가게 해준다.
- 내부적으로 RequestCache라는 저장소를 사용한다.
-Reference
https://docs.spring.io/spring-security/reference/servlet/architecture.html
https://www.slideshare.net/analizator/spring-security-framework
😋 지극히 개인적인 블로그지만 댓글과 조언은 제 성장에 도움이 됩니다 😋
'Web > Spring-Security' 카테고리의 다른 글
[Security] 시큐리티 파헤치기 (4) : 인증이란? (feat. Authentication) (1) | 2023.08.17 |
---|---|
[Security] 시큐리티 파헤치기 (3) : 시큐리티 초기화, 다중 필터 체인 (0) | 2023.08.11 |
[Security] 시큐리티 파헤치기 (1) : DelegatingFilterProxy (0) | 2023.08.02 |
[Security] Spring Security (2) (0) | 2022.10.05 |
[Security] Spring Security (1) (0) | 2022.10.05 |
댓글