인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

노동준님의 프로필 이미지

작성한 질문수

스프링 시큐리티 완전 정복 [6.x 개정판]

WebSecurity / HttpSecurity

생성된 SecurityFilterChain 빈을 SecurityBuilder 에 저장하는 원리가 궁금합니다.

작성

·

128

0

강의에서 SecurityBuilder를 통해 생성된 SecurityFilterChain 을 저장한다는 설명과 관련해서 어떤 코드가 실행하는지 분석을 나름 해보았는데요, 맞는지 확인받고 싶습니다.

WebSecurityConfiguration 클래스에 springSecurityFilterChain() 메서드에 다음과 같은 코드가 있습니다.

for(SecurityFilterChain securityFilterChain : this.securityFilterChains) {
            this.webSecurity.addSecurityFilterChainBuilder(() -> securityFilterChain);
        }

해당 코드에서 addSecurityFilterChainBuilder() 메서드는
SecurityBuilder<O extends SecurityFilterChain> securityFilterChainBuilder 를 파라미터로 받고 있는데,

해당 파라미터로 람다식을 이용해서 HttpSecurity에서 생성한 객체를 SecurityBuilder의 build() 메서드를 호출시 리턴할 수 있게 () -> securityFilterChain 했고 해당 람다식이 addSecurityFilterChainBuilder() 메서드로 인해 WebSecurity 필드인 securityFilterChainBuilders 에 저장이 되었습니다.

저장된 람다식은 WebSecurity 에 performBuild() 메서드에 구현되어 있는

 for(SecurityBuilder<? extends SecurityFilterChain> securityFilterChainBuilder : this.securityFilterChainBuilders) {
            SecurityFilterChain securityFilterChain = (SecurityFilterChain)securityFilterChainBuilder.build();

다음과 같은 for 문에서 build() 메서드를 호출하면서 SecurityFilterChain 객체를 불러오게 됩니다.

다음과 같은 과정으로 SecurityBuilder 에 저장하고 꺼낼 수 있다고 이해했는데 맞을까요?

답변 1

1

정수원님의 프로필 이미지
정수원
지식공유자

네 꽤 어려운 흐름인데도 잘 분석하셨습니다

초기화가 시작되고 나서 핵심 객체가 생성되는 원리를 아는 것은 시큐리티 전반적인 흐름을 에해하는 관점에서도 중요합니다

지금처럼 다른 부분들도 하나씩 파헤쳐 나가시다보면 더 많은 인사이트들을 가질 수 있을 것입니다

노동준님의 프로필 이미지
노동준
질문자

감사합니다!