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

정민교님의 프로필 이미지

작성한 질문수

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

Rest 인증 필터 구현 - RestAuthenticationFilter

restSecurityFilterChian에서 addFilterBefore와 authenticationManger 질문

작성

·

105

·

수정됨

0

httpSecurity.formLogin()을 설정해주지 않으면, securityFilterChain에 UsernamePasswordAuthenticationFilter가 없지 않나요?

 

restAuthenticationFilter를 UsernamePasswordAuthenticationFilter 앞에 추가할 수 있나요?

 

restAuthenticationFilter에서 authenticationManager를 사용할 수 있도록 설정해주었는데, httpSecurity에 또 세팅해줘야 하는 이유가 있는걸까요?

답변 1

0

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

필터의 순서를 정할 때는 스프링 시큐리티가 내부적으로 관리하는 모든 필터에 대한 순서를 이미 정해 놓고 저장하고 있습니다.

UsernamePasswordAuthenticationFilter 의 순서가 정해져 있습니다.

그렇기 때문에 httpSecurity.formLogin() 설정과는 별개로 진행이 됩니다.

image.png


내부 소스를 보시면 위와 같이 실행이 되는데 registeredFilter 가 UsernamePasswordAuthenticationFilter 이고 이 필터는 filterOrders 에 순서가 이미 저장되어 있습니다.

 

그리고 authenticationManager 를 httpSecurity에 저장해 주어야 하는 이유는 authenticationManager 를 얻어오는 방법이 httpSecurity 로부터 직접 수동으로 생성해서 얻어오기 때문에 httpSecurity 에 저장해 주어야 하는 과정이 필요하다고 이해하시면 됩니다.

그렇지 않으면 httpSecurity 가 또 authenticationManager 을 얻어오기 위한 생성을 중복으로 하기 때문에 오류가 발생합니다.

이 부분은 강의에서 설명하고 있는 내용으로만 이해하셔도 됩니다. 그렇게 깊이까지는 아실 필요는 없습니다.

정민교님의 프로필 이미지
정민교
질문자

  1. UsernamePasswordAuthenticationFilter

각 필터마다 필터 순서가 정해져 있고, UsernamePasswordAuthenticationFilter가 SecurityFilterChain에 포함되어 있는 지 여부에 상관 없이,

restAuthenticationFilter를 SecurityFilterChain에 포함한다면 UsernamePasswordAuthenticaionFilter의 앞 순서로 지정하는 거 뿐이다. 이렇게 이해하면 될까요?

 

  1. AuthenticationManager

HttpSecurity에 AuthenticationManager 설정을 해주지 않으면 AuthenticaionManager 생성을 중복으로 하기 때문에 이미 생성한 AuthenticationManager를 설정해줘야 한다는 말씀 맞을까요?

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

네 잘 이해하셨습니다^^

정민교님의 프로필 이미지
정민교
질문자

답변 감사드립니다!