[SpringSecurity] Spring Security 아키텍쳐(with Servlet based application)

su_y2on·2022년 7월 3일
0

Security

목록 보기
2/4
post-thumbnail
post-custom-banner

Spring Security (with Servlet based application)

Spring Security란?

Spring based application의 보안을 책임지는 프레임워크입니다.




Spring Security Architecture

Servlet based application에 대해서 Spring Security는 대부분 Servlet Filter기반으로 돌아갑니다.

HTTP요청이 Servlet(DispatcherServlet)에 도착하기 전에 Filter들을 지나게됩니다. 여러가지 필터들을 지날 수 있으며 Filter의 순서도 매우 중요합니다.




DelegatingFilterProxy

Spring은 DelegatingFilterProxy라는 필터 구현체를 제공합니다. 이 구현체는 FilterChain사이에 끼여있으며 Spring Bean에 모든 일들을 위임합니다.

DelegatingFilterProxy의 장점은 filter bean의 참조를 미룰 수 있습니다. 이렇게 해야하는 이유는 container가 시작하기전에 filter를 먼저 등록해야하기 때문입니다. 하지만 Spring Bean은 Filter들이 모두 등록될 때까지 load될 수 없습니다.

즉 Bean이 실제로 로드되기전에 필요로하기 때문에 DelegatingFilterProxy를 이용해 해결할 수 있습니다.




FilterChainProxy

Spring Security는 Spring Bean중 하나인 FilterChainProxy를 통해 Filter들에게 일을 위임시킬 수 있도록 해줍니다. 이 Filter들은 SecurityFilterChain에 모여있습니다.




SecurityFilterChain

Security Filter들은 FilterChainProxy에 등록이 되어있습니다. DelegatingFilterProxy도 Servlet container도 아닌 FilterChainProxy등록되었기 때문에 몇가지 장점을 가집니다.

첫번째는 Servlet기반 Spring Security의 시작점이 된다는 것입니다. 따라서 Spring Security에서 문제가 생겼다면 여기를 디버그포인트로 잡으면 좋습니다.

두번째로는 FilterChainProxy는 Spring Security의 핵심이기 때문에 필수적으로 이뤄져야하는 중요한 작업들을 처리할 수 있습니다.

추가로 RequestMatcher를 통해 언제 특정한 Filter가 작동할지 정할 수도 있습니다.

마지막으로 여러개의 SecurityFilterchain을 만들어서 관리할 수 있습니다. 이 SecurityFilterChain은 독립적으로 그리고 서로 다르게 동작합니다. 아예 filter하나도 넣지 않아 Spring Security를 무시하게 할 수도 있습니다.





여기까지 filter기반 Servlet Application에서의 Spring Security 아키텍쳐를 살펴봤습니다!

참고 : https://docs.spring.io/spring-security/reference/servlet/architecture.html

post-custom-banner

0개의 댓글