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

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

ckstj8027님의 프로필 이미지

작성한 질문수

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

인증 제공자 - AuthenticationProvider - 2

authenticationManagerBuilder 주입받은거 vs 만든 거

작성

·

34

0

 

HttpSecurity에서 가져오는 AuthenticationManagerBuilder와

주입받는 AuthenticationManagerBuilder가 사로 다르지만 타입이 같아 메서드는 똑같을텐데

 

managerBuilder.authenticationProvider(new DaoAuthenticationProvider());
 builder.authenticationProvider(new DaoAuthenticationProvider());

후자일경우 수업 내용처럼
부모 프로파이더에는

DaoAuthenticationProvider() 가 들어가고

providers 에는 커스텀과 익명 프로바이더 2개가 들어가는데요


전자 즉 직접 참조하는 AuthenticationManagerBuilder는
부모 프로바이더는 null 인데 반해

기존 providers 에 생겨서 총 3개가되고있습니다
물론 실제 실행할때에는 똑같은 결과지만

 

함수authenticationProvider 은
public AuthenticationManagerBuilder authenticationProvider(AuthenticationProvider authenticationProvider) { this.authenticationProviders.add(authenticationProvider); return this; }
인데 왜 각각의 작동이 다른지 궁금합니다












 



 

답변 1

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다.

ckstj8027님의 질문은 HttpSecurity와 주입받는 AuthenticationManagerBuilder 간의 차이에 관한 내용입니다. 기본적으로 두 객체 모두 AuthenticationManagerBuilder 타입을 가지며, 동일한 메서드 authenticationProvider()를 사용할 수 있습니다. 하지만, 이들이 생성되고 관리되는 방식에 따라 커스텀 AuthenticationProvider가 등록되는 과정에서 차이가 발생할 수 있습니다.

HttpSecurityAuthenticationManagerBuilder의 역할

  1. HttpSecurity에서 얻은 AuthenticationManagerBuilder: 이 객체는 스프링 시큐리티가 관리하는 전체 보안 설정을 정의하는 데 사용됩니다. HttpSecurity 설정을 통해 추가한 AuthenticationProvider는 스프링 시큐리티가 요청을 처리할 때 기본적인 인증 방식 중 하나로 사용됩니다.

  2. 직접 주입받은 AuthenticationManagerBuilder: 이 경우, 스프링이 여러 AuthenticationManagerBuilder 인스턴스를 관리할 수 있으며, 특정 운영 방식이나 커스텀 필터 적용과 같은 독립적 상황에서 사용될 수 있습니다.

행동의 차이점

두 인스턴스가 동일한 타입과 메서드를 가지지만, 내부적으로 추가된 제공자가 저장되는 컬렉션이나 그 용도가 다를 수 있습니다. 이는 특정 타입의 주입 방식이 해당 객체의 다른 Spring Context 내에서 실행되는 방식에서 기인할 수 있습니다.

  • HttpSecurity를 통한 설정에서는 일반적으로 전체 글로벌 설정에 영향을 미치는 구조로 동작하며, 모든 필터나 프로바이더와 조화롭게 작동할 수 있도록 설계됩니다.

  • 직접 주입된 AuthenticationManagerBuilder의 사용에서는 독립적으로 특정 인증 시나리오나 환경 구성에 필요한 별도의 설정으로 사용될 수 있습니다.

이로 인해 제공자가 동일하게 추가된다 하더라도, 그 동작적인 맥락이나 우선순위가 Spring Context의 작동 구조에 따라 달라질 수 있습니다.

혹시 위 내용으로 해결되지 않는 부분이 있으시면, 아래 유사한 질문 링크를 참고하시면 더 깊이 있는 이해를 얻으실 수 있습니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.