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

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

보물섬님의 프로필 이미지
보물섬

작성한 질문수

스프링 시큐리티

7) 인증 관리자 : AuthenticationManager

ProviderManager가 부모용이 따로 있는 이유가 있을까요?

작성

·

377

5

안녕하세요.

ProviderManager가 부모용이 따로 있는 이유가 있을까요?

어짜피 AuthenticationProvider가 List라 DaoAuthenticationProvider, AnonymousAuthenticationProvider 둘다 가지고 있어도 될거 같은데요.

스프링이 아무이유없이 저렇게 하진 않았을거 같은데 혹시 제가 모르는 어떤 이유가 있을까요?

그리고 ProviderManager가 하나가 아니고 여러개인 경우는 어떤 경우인가요?

이것 역시 AuthenticationProvider 가 List라 딲히 여러개일 필요가 없어 보이는데 미약한 저의 실력으론 딱히 떠오르지 않네요.

주말 잘보내시고 좋은 강좌 감사합니다.

답변 1

6

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

네 

말씀하신 것처럼 ProviderManager 가 parent 가 있는 것과 여러개의 ProviderManager 를 생성할 수 있는 기능을 제공하는 것 자체가 중요한 이유가 있는 것은 아닙니다. 

일반적으로 인증을 수행하게 되면 ProviderManager 의  실행 이후 AuthenticatonProvider 로 부터 최종 인증 결과를 받게 되지만 만약 인증결과가 null 로 받을 경우 혹시 parent 에 있는 AuthenticatonProvider 에게 인증을 위임해서 확인해 보자는 차원이지 거창한 이유로 한 것은 아닙니다.

이런 패턴은 다른 기술에서도 유사하게 볼 수 있습니다.

대부분은 기본 기능 안에서 처리되지만 그렇지 못한 경우 부모에게까지 거슬러 올라가서 처리를 맡겨 보자는 의미라고 볼 수 있습니다.

그리고 여러개의 ProviderManager 를 생성해서 인증을 처리할 수도 있는데 거의 사용할 일이 없을 것 같습니다.

다만 간혹 여러개의 인증 방식을 동시에 사용해야 할 경우, 예를 들면 Form 인증방식과 Rest 인증방식을 병렬적으로 적용해야 하는 경우 인증방식마다 ProviderManager 를 별도로 생성해서 관리할 수 있지만 굳이 그렇게 할 이유는 없습니다
하나의 ProviderManager 로도 처리가 가능하기 때문입니다.

보물섬님의 프로필 이미지
보물섬

작성한 질문수

질문하기