Spring Security (1) - 구조와 동작 방식

카우치코딩·2022년 1월 25일
2

포트폴리오강의

목록 보기
19/20
post-thumbnail

Spring Security는 Spring Application 개발시에 보안을 적용하기 위해 사용하는 보안 프레임워크 입니다. Spring Security는 웹 보안을 위하여 인증 및 보안 관련 로직을 제공합니다. 특히 Spring Security의 가장 중요한 기능 중 하나는 리소스별 권한 제어인데, Spring Security에서는 설정을 통해 리소스별 권한 제어, 리소스별 인증 로직 구현을 쉽게 구현할 수 있습니다.

Spring Security 구조

Spring Security는 Filter 한 종류로 사용자의 요청이 Servlet Application에 도착하기 전에 사용자의 요청을 먼저 받아 사용자의 요청의 권한 및 보안 점검을 시행합니다. D Spring Seucity는 어떤 식으로 동작할까요?
(아직 프레임워크에 대해 잘 모르시는 분들은 이전 포스팅을 먼저 보시는 것을 추천드립니다.)

Filter

우리가 HTTP 요청을 Servlet이 HTTP 요청을 받아 Controller에 HTTP 요청을 전달해줍니다. 그러나 때로는 Servlet에 HTTP 요청에 전처리를 해주거나 사용자에게 전달하는 응답에 후처리를 해줘야할 때가 있습니다. 예를 들면 모든 요청과 응답에 대한 로깅, 요청의 보안 검사가 있습니다. 이런 전처리 후처리를 담당하는 컴포넌트를 Filter라고 합니다.

위의 그림은 Filter의 동작 방식을 나타낸 그림입니다. 여러 Filter는 1 -> 2 -> 3 -> Servlet -> 3 -> 2 -> 1순서대로 처리가 되는 것을 볼 수 있습니다. 이를 Filter Chain라 합니다. Filter들을 순서대로 거치면서 요청의 전처리 후처리가 되는 것이죠.

Security Filter Chain

Spring Security는 앞서 설명한 Filter를 이용하여 보안을 수행합니다. 일반적인 Filter의 경우 모든 요청에 모든 Filter가 동작합니다. 그러나 Spring Security는 사용자가 접근하는 리소스에 따라서 보안 및 인증 처리를 하기 때문에 일반적인 Filter가 아닌 FilterChainProxy를 구현하여 사용합니다.

위의 구조는 Spring Security의 Filter 구조입니다. DelegatingFilterProxy는 Spring Bean을 Filter로 등록할 수 있게 해주는 Proxy 객체입니다. Spring Security는 SecurityFilterChain이라는 FilterChainProxy를 Filter로 등록하는데, 이는 Rosource 별로 다른 FilterChain을 등록하게 만들어 주는 역할을 합니다. Spring Security는 이러한 구조를 통해서 사용자가 접근하려는 리소스별로 보안 로직을 다르게 하는 유연한 구조를 가지고 있습니다.

우리는 이제 리소스별로 어떠한 Filter를 적용할 것인지 선언만 해주면 Spring Security가 그에 맞는 보안을 수행하게 할 수 있습니다. Spring Security에서 사전에 구현해 놓은 Filter를 적용하여도 되고, 아니면 커스텀 Filter를 만들어 적용할 수도 있습니다.

Spring Filter Chain 리스트

위의 그림은 Spring Security에서 기본적으로 제공하는 Filter의 동작 순서와 리스트 입니다. 다음 시간에는 실제로 설정 파일에서 사용할 Filter를 설정하고 사용하지 않을 Filter를 제거하고, URL별로 권한 체크와 Filter를 적용하는 방법에 대해서 알아보도록 하겠습니다.

About Couchcoding

카우치코딩에서는 1:1 코딩 문제해결 멘토링 서비스입니다. 가르치는데 관심있는 멘토분들이나 문제해결이 필요한 멘티분들 방문해주세요~
또한 별도로 6주 포트폴리오 수업을 진행중에있습니다. 혼자 포트폴리오 준비를 하는데 어려움이 있으면 관심가져주세요~

profile
포트폴리오 수업 & 코딩 멘토링 서비스 카우치코딩입니다.

0개의 댓글