안녕하세요 오늘은 Spring Security 초기화
과정의 기본이 되는 Security Builder
와 Security Configurer
에 대해서 알아보겠습니다 ❗️
실제 프로젝트을 세팅해서 알아볼 예정이며, 개념 중심으로 구체적으로 알아보겠습니다.
먼저 Security Builder
에 대해서 알아보고 Security Builder
에 포함되는 Security Configurer
에 대해서 알아보겠습니다 ❗️
Security Buidler 는 빌더 클래스로서 웹 보안을 구성하는 빈 객체와 여러 설정 클래스들을 생성하는 역할을 합니다.
인터페이스이며 AbstractSecurityBuilder
, AbstractConfiguredSecurityBuilder
등 SecurityBuilder 을 구현한 여러 구현체가 존재합니다.
하지만 가장 대표적인 구현체로는 WebSecurity
,HttpSecurity
,AuthenticationManagerBuilder
가 있습니다.
해당 이미지와 같이 SecurityBuilder 을 구현한 여러 구현체가 존재하며 build
을 통해 SecurityBuilder 구현체를 구성하는 SecurityConfigurer 가 초기화(init
) 되고 생성(configure
) 됩니다.
즉, SecurityBuilder 의 build() 메소드를 통해 해당 SecurityBuilder 을 구성하는 SecurityConfigurer 가 동작하며 실제 인증 및 인가 초기화 작업을 수행합니다 ❗️
Security Configurer 는 Http 요청과 관련된 인증/인가 처리를 담당하는 필터를 생성하고, Spring Security 관련 필요한 여러 클래스 및 구성 요소들을 초기화하는 역할을 합니다.
Security Builder 와 마찬가지로 인터페이스이며 밑에 이미지와 같이 여러 구현체가 존재합니다.
통상적으로 Spring Security 관련 설정을 커스텀하기 위해 SecurityConfig
와 같은 설정 클래스를 별도로 구현하지 않으면 Spring Security 에 기본으로 설정된 Security Configurer 구현체가 동작하면서 필요한 필터 및 구성 요소가 동작합니다.
즉, 정리하면 Security Configurer 는 Spring Security Filter Chain 을 구성하는 여러 필터들 혹은 인증 방식에서 동작하는 AuthenticationManager
등의 구성 요소들을 초기화 하는 역할을 합니다.
개발자가 구현한 인증/인가 로직에 맞는 Security Builder 가 구성되어 필요한 설정 클래스 및 빈이 생성되고 이에 포함되어 있는 Security Configurer 가 이렇게 생성된 클래스 및 빈을 초기화 하고 Security Filter Chain 을 생성합니다 ❗️
Security Builder 와 Security Configurer 의 동작 원리에 대해 더 자세히 살펴보겠습니다.
Spring Security 관련 설정을 완료 후 어플리케이션을 구동합니다. 이 때, Spring Security 초기화가 이루어집니다.
먼저, 구현한 코드에 따라 Security Builder 빌더 클래스가 만들어 지는데 이 때 미리 apply
메소드를 통해 Security Builder 가 필요한 초기화 대상(= Security Configurer)을 생성 및 적용합니다.
해당 코드는 Security Builder 의 구현체 중 하나인 AbstractConfiguredSecurityBuilder
의 apply
메소드입니다. Security Configurer 을 매개변수로 받아 필요한 초기화 대상을 생성하고 적용하고 있는 것을 확인할 수 있습니다.
더 간단히 이야기하자면, 앞서 설명한 바와 같이 개발자가 구현한 인증/인가 코드에 맞춰서 Security Builder 는 알맞은 설정 클래스 및 빈을 생성한다고 했죠?
즉, 해당 로직에 맞는 Security Configurer 가 필요합니다. 만약 폼 로그인과 관련된 로직을 가지고 있다면 초기화 과정에서 SecurityBuilder 는 FormLoginConfigurer
을 포함할 것입니다. 이 때 apply
메소드가 사용됩니다.
그 후, build
메소드를 통해 Security Builder 가 apply
메소드를 통해 포함했던 Security Configurer 을 동작시킵니다 ❗️
앞서 Security Builder 구현체의 apply
메소드로 초기화 대상이 된 Security Configurer 의 init
과 configurer
가 동작합니다.
이를 통해, 개발자가 구현한 인증/인가 로직에 맞는 설정이 완료됩니다. 여기서 설정이 완료된다는 것은 필요한 클래스(AuthenticationManager, AuthenticationProvider 등)이 정상적으로 생성되며, Security Filter Chain
또한 준비된 상태를 말합니다.
앞서 Security Builder 의 여러 구현체 중 대표적인 것에 HttpSecurity
와 WebSecurity
가 있다고 했습니다.
최종적으로 HttpSecurity
의 build
결과물은 SecurityFilterChain
이며, WebSecurity
의 build
결과물은 FilterChainProxy
입니다.
: Spring Security - 2. FilterChainProxy 알아보기
[Security] SecurityBuilder 와 SecurityConfigurer
[SPRING SECURITY]우아한 멀티 타입 빌더
Spring/Security