본 Spring Security 시리즈 내용은 인프런 정수원님의 강의 내용을 정리한 시리즈입니다.
상업적 이용 목적의 포스팅 무단 복제 및 사용을 금합니다.
별도의 코드를 작성하지 않아도 spring boot start security 모듈만 추가하면 자동 설정에 의해 기본적인 웹 보안 기능이 적용된다.
SecurityProperties
클래스에서 기본 계정을 제공한다.
더 정확히는 SecurityProperties
클래스의 static 내부 클래스 User
클래스를 통해 기본 계정을 생성한다.
이 정보를 메모리에 저장을 하기 위해 getName()
메소드와 getPassword()
메소드를 호출하는 곳이 있다.
두 메소드를 호출하는 곳이 UserDetailsServiceAutoConfiguration
설정 클래스의 InMemoryUserDetailsManager
빈을 생성하는 메소드 inMemoryUserDetailsManager
에서 아까 언급한 두 메소드를 호출한다.
참고로 UserDetailsManager
는 인터페이스이고 이를 구현한 구현체들이 보통 유저 정보를 관리하는 객체가 된다. InMemoryUserDetailsManager
는 유저 정보를 메모리에 저장하고 관리하는 객체다.
기본적인 웹 보안 기능을 적용해주는 클래스가 SpringBootWebSecurityConfiguration
클래스다.
Spring Boot 자동 설정에 의해 SpringBootWebSeuciryConfiguration
클래스의 static 내부 클래스인 SecurityFilterChainConfiguration
클래스의 defaultSecurityFilterChain
빈 생성 메소드가 실행되어 SecurityFilterChain
빈이 생성된다.
defaultSecurityFilterChain
빈 생성 메소드가 매번 실행되는 것은 아니고 특정 조건에 맞을 때에만 실행된다.
@ConditionalOnDefaultWebSecurity
어노테이션을 살펴보면 다음과 같이 @Conditional(DefaultWebSecurityCondition.class)
를 메타 어노테이션으로 가지고 있다.
DefaultWebSecurityCondition
을 살펴보면 다음과 같다.
조건은 다음과 같은데
SecurityFilterChain
, HttpSecurity
클래스가 클래스 패스에 존재하는 상태
SecurityFilterChain
빈을 따로 생성하지 않은 상태
Spring Security 의존성을 추가했고(1번 만족), 따로 SecurityFilterChain
빈으로 등록하는 코드를 작성하지 않았기 때문에(2번 만족) 현재 모두 참인 상태이고 SecurityFilterChain
빈을 생성하는 defaultSecurityFilterChain
빈 생성 메소드가 실행되면서 기본 웹 보안 기능이 적용되고 SecurityFilterChain
빈이 생성된다.