• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

두개의 ProviderManager가 생성되는 이유

22.01.26 10:52 작성 조회수 341

0

안녕하세요 강사님. 좋은 강의 정말 감사드립니다.

강의를 듣던 도중, formLogin 방식으로 설정해놓은 프로그램에 로그인 요청이 들어왔을 때 ( 초기화 시에 ) 두 개의 ProviderManager가 생성된다고 하셨습니다. 그 흐름은 우선 formLogin 방식이기 때문에 parentAuthenticationManager에 DaoAuthenticationProvider가 저장되고, 이후에 다시 자식 매니저에 AnonymousAuthenticationProvider가 저장된다는 흐름이었습니다. 

1. 첫 번째로 궁금했던 점은 'formLogin 방식으로 지정되어 있는 로그인 페이지에서 왜 굳이 AnonymousAuthenticationProvider가 필요할까 ?' 입니다.

2. 1번 질문의 연장선으로 , 그렇다면 로그인되지 않은 사용자도 사용할 수 있는 페이지를 설계할 때 필요하기 때문에 이런 과정이 들어가 있는 것일까요 ? 

답변 1

답변을 작성해보세요.

1

1. 첫 번째로 궁금했던 점은 'formLogin 방식으로 지정되어 있는 로그인 페이지에서 왜 굳이 AnonymousAuthenticationProvider가 필요할까 ?' 입니다.

사용자가 사이트에 접속한다면 최초에는 무조건 익명사용자입니다.

그렇기 때문에 익명사용자용 AnonymousAuthenticationProvider 가 있어야 합니다.

익명사용자가 사이트에서 인증을 시도할 수도 있고 하지 않을 수도 있습니다.

또한 인증 이후 로그아웃 한다면 다시 익명사용자가 됩니다.

그래서 무조건 익명사용자용 AnonymousAuthenticationProvider 는 필요한 것이라 보시면 됩니다.

 

2. 1번 질문의 연장선으로 , 그렇다면 로그인되지 않은 사용자도 사용할 수 있는 페이지를 설계할 때 필요하기 때문에 이런 과정이 들어가 있는 것일까요 ? 

 

네 그것도 포함됩니다.

스프링 시큐리티는 로그인하지 않은 사용자 즉 익명사용자를 구분하기 위한 별도의 프로세스를 관리하고 있다고 보시면 됩니다.

이이이2님의 프로필

이이이2

2022.06.20

인증 처리시면, 모두 익명사용자로 시작한다고 생각합니다

또한 인증된 이후면,
UsernamePasswrodAuthenticationFilter가 호출될일이 없어
AuthenticationProvider가 호출될 일이 없다고 생각합니다.

그러면 DaoAuthenticationProvider 또는 AnonymousAuthenticationProvider

둘중 하나만 있어도 되는것 아닌가요?

-------

jwt방식으로 + json입력으로 설계중에있어서 
formLogin.disable()중인데

jwt때는 어떤 provider가 동작하게되나요??

(form로긴으로 예전에 했을땐 Dao프로바이더에 UserDetailService의구현체를 지정했었는데,

이번 jwt엔 인증필터를 UsernamePasswordAuthenticationFilter상속 받아설계했고,
UserDetailService의 구현체 설계해 놓은것이 자동적으로 동작하긴하던데요..
디버깅해보니 DaoAuthenticationProvider가 찍히긴 합니다.. (formLogin.disable()입니다)
)