[Spring Security] Security Builder 와 Security Configurer

최동근·2024년 1월 1일
0
post-thumbnail

안녕하세요 오늘은 Spring Security 초기화 과정의 기본이 되는 Security BuilderSecurity Configurer 에 대해서 알아보겠습니다 ❗️
실제 프로젝트을 세팅해서 알아볼 예정이며, 개념 중심으로 구체적으로 알아보겠습니다.

🍟 프로젝트 세팅

  • Spring Boot 3.1.7
  • Spring Security 6.1.6

🍟 Security Builder & Security Configurer

먼저 Security Builder 에 대해서 알아보고 Security Builder 에 포함되는 Security Configurer 에 대해서 알아보겠습니다 ❗️

Security Builder 에 대해

Security Buidler 는 빌더 클래스로서 웹 보안을 구성하는 빈 객체와 여러 설정 클래스들을 생성하는 역할을 합니다.


인터페이스이며 AbstractSecurityBuilder, AbstractConfiguredSecurityBuilder 등 SecurityBuilder 을 구현한 여러 구현체가 존재합니다.
하지만 가장 대표적인 구현체로는 WebSecurity,HttpSecurity,AuthenticationManagerBuilder 가 있습니다.


해당 이미지와 같이 SecurityBuilder 을 구현한 여러 구현체가 존재하며 build 을 통해 SecurityBuilder 구현체를 구성하는 SecurityConfigurer 가 초기화(init) 되고 생성(configure) 됩니다.
즉, SecurityBuilder 의 build() 메소드를 통해 해당 SecurityBuilder 을 구성하는 SecurityConfigurer 가 동작하며 실제 인증 및 인가 초기화 작업을 수행합니다 ❗️

Security Configurer 에 대해

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 의 동작 원리에 대해 더 자세히 살펴보겠습니다.

1. Security Builder 동작

Spring Security 관련 설정을 완료 후 어플리케이션을 구동합니다. 이 때, Spring Security 초기화가 이루어집니다.
먼저, 구현한 코드에 따라 Security Builder 빌더 클래스가 만들어 지는데 이 때 미리 apply 메소드를 통해 Security Builder 가 필요한 초기화 대상(= Security Configurer)을 생성 및 적용합니다.

해당 코드는 Security Builder 의 구현체 중 하나인 AbstractConfiguredSecurityBuilderapply 메소드입니다. Security Configurer 을 매개변수로 받아 필요한 초기화 대상을 생성하고 적용하고 있는 것을 확인할 수 있습니다.

더 간단히 이야기하자면, 앞서 설명한 바와 같이 개발자가 구현한 인증/인가 코드에 맞춰서 Security Builder 는 알맞은 설정 클래스 및 빈을 생성한다고 했죠?
즉, 해당 로직에 맞는 Security Configurer 가 필요합니다. 만약 폼 로그인과 관련된 로직을 가지고 있다면 초기화 과정에서 SecurityBuilder 는 FormLoginConfigurer 을 포함할 것입니다. 이 때 apply 메소드가 사용됩니다.

그 후, build 메소드를 통해 Security Builder 가 apply 메소드를 통해 포함했던 Security Configurer 을 동작시킵니다 ❗️

2. Security Configurer 동작

앞서 Security Builder 구현체의 apply 메소드로 초기화 대상이 된 Security Configurer 의 initconfigurer 가 동작합니다.
이를 통해, 개발자가 구현한 인증/인가 로직에 맞는 설정이 완료됩니다. 여기서 설정이 완료된다는 것은 필요한 클래스(AuthenticationManager, AuthenticationProvider 등)이 정상적으로 생성되며, Security Filter Chain 또한 준비된 상태를 말합니다.

앞서 Security Builder 의 여러 구현체 중 대표적인 것에 HttpSecurityWebSecurity 가 있다고 했습니다.
최종적으로 HttpSecuritybuild 결과물은 SecurityFilterChain 이며, WebSecuritybuild 결과물은 FilterChainProxy 입니다.
: Spring Security - 2. FilterChainProxy 알아보기

🍟 Security Builder, Security Configurer 을 이용한 전체 과정


참고

[Security] SecurityBuilder 와 SecurityConfigurer
[SPRING SECURITY]우아한 멀티 타입 빌더
Spring/Security

profile
비즈니스가치를추구하는개발자

0개의 댓글