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

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

hoonseung님의 프로필 이미지
hoonseung

작성한 질문수

스프링 시큐리티 OAuth2

DefaultOAuth2AuthorizedClientManager -필터 기반으로 구현하기

AuthenticationManager 생성시점

작성

·

19

·

수정됨

0

가끔 securityconfig 설정 중 AbstractAuthenticationProcessingFilter 상속한 필터를 만들 때 AuthenticationManager가 필요해서 http.shareObject로 받아오면 Null을 반환하더라구요.

protected void beforeConfigure() throws Exception {
    if (this.authenticationManager != null) {
        this.setSharedObject(AuthenticationManager.class, this.authenticationManager);
    } else {
        ObjectPostProcessor<AuthenticationManager> postProcessor = this.getAuthenticationManagerPostProcessor();
        AuthenticationManager manager = (AuthenticationManager)this.getAuthenticationRegistry().build();
        if (manager != null) {
            this.setSharedObject(AuthenticationManager.class, (AuthenticationManager)postProcessor.postProcess(manager));
        }
    }

여기서 httpSecurity의 해당 메서드에서 providerManger를 생성하는 거 같으나 디버깅했을때

여기보다 제가 Bean으로 정의한 SecurityFilterchain이 먼저 걸려 httpSecurity.getShareObject()를 하면 null을 반환하더라구요. 그래서 authenticationConfiguration.getAuthenticationManager()으로 넣기는 하였으나 이게 정확히 AuthenticationManager생성주기가 매우 궁금하여 질문드립니다.

답변 1

0

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

hoonseung님, 질문 주신 내용은 Spring Security의 AuthenticationManager 생성 시점과 관련이 있군요. AuthenticationManager의 생성 주기는 보통 SecurityFilterChain 설정 시점과 관련이 깊습니다. Spring Security에서 AuthenticationManager는 일반적으로 SecurityFilterChain에 설정된 보안 규칙에 따라 설정되며, Spring Boot에서는 사용자 정의 SecurityFilterChain이 있으면 기본 보안 설정을 비활성화하게 됩니다.

http.getSharedObject(AuthenticationManager.class)null을 반환하는 이유는 보통 SecurityFilterChain 내의 HttpSecurity가 아직 AuthenticationManager를 완전히 구성하지 않았기 때문입니다. 그리고 직접 SecurityFilterChain을 정의하여 Bean으로 등록한 경우, 그 설정이 우선 적용되어 기본 보안 설정을 대체합니다.

authenticationConfiguration.getAuthenticationManager() 메서드를 사용하여 AuthenticationManager를 가져오는 것은 유효한 방법입니다. 이는 전체 보안 설정이 초기화될 때 AuthenticationManager가 올바로 설정되었는지를 확인하는 데 도움이 됩니다.

추가로, @Bean으로 정의된 AuthenticationManager, AuthenticationProvider, 혹은 UserDetailsService가 있으면 이는 기본 InMemoryUserDetailsManager Bean 생성이 막히게 되어 Spring Security의 전체 기능을 사용할 수 있습니다. 이러한 Bean의 정의는 AuthenticationManager의 초기화 및 설정 순서에 영향을 주게 됩니다.

더 구체적인 구성과 관련된 사항은 해석의 여지가 있을 수 있으니, 특정 구현에 대한 질문이 필요하다면 관련 코드나 설정을 자세히 검토하여 보는 것이 좋습니다. Spring Boot 공식 문서를 참조하시면 추가적인 정보를 얻을 수 있습니다.

도움이 되셨기를 바랍니다. 추가 질문이 있다면 언제든지 문의해 주세요!

hoonseung님의 프로필 이미지
hoonseung

작성한 질문수

질문하기