작성
·
105
·
수정됨
0
httpSecurity.formLogin()을 설정해주지 않으면, securityFilterChain에 UsernamePasswordAuthenticationFilter가 없지 않나요?
restAuthenticationFilter를 UsernamePasswordAuthenticationFilter 앞에 추가할 수 있나요?
restAuthenticationFilter에서 authenticationManager를 사용할 수 있도록 설정해주었는데, httpSecurity에 또 세팅해줘야 하는 이유가 있는걸까요?
답변 1
0
네
필터의 순서를 정할 때는 스프링 시큐리티가 내부적으로 관리하는 모든 필터에 대한 순서를 이미 정해 놓고 저장하고 있습니다.
즉 UsernamePasswordAuthenticationFilter 의 순서가 정해져 있습니다.
그렇기 때문에 httpSecurity.formLogin() 설정과는 별개로 진행이 됩니다.
내부 소스를 보시면 위와 같이 실행이 되는데 registeredFilter 가 UsernamePasswordAuthenticationFilter 이고 이 필터는 filterOrders 에 순서가 이미 저장되어 있습니다.
그리고 authenticationManager 를 httpSecurity에 저장해 주어야 하는 이유는 authenticationManager 를 얻어오는 방법이 httpSecurity 로부터 직접 수동으로 생성해서 얻어오기 때문에 httpSecurity 에 저장해 주어야 하는 과정이 필요하다고 이해하시면 됩니다.
그렇지 않으면 httpSecurity 가 또 authenticationManager 을 얻어오기 위한 생성을 중복으로 하기 때문에 오류가 발생합니다.
이 부분은 강의에서 설명하고 있는 내용으로만 이해하셔도 됩니다. 그렇게 깊이까지는 아실 필요는 없습니다.
UsernamePasswordAuthenticationFilter
각 필터마다 필터 순서가 정해져 있고, UsernamePasswordAuthenticationFilter가 SecurityFilterChain에 포함되어 있는 지 여부에 상관 없이,
restAuthenticationFilter를 SecurityFilterChain에 포함한다면 UsernamePasswordAuthenticaionFilter의 앞 순서로 지정하는 거 뿐이다. 이렇게 이해하면 될까요?
AuthenticationManager
HttpSecurity에 AuthenticationManager 설정을 해주지 않으면 AuthenticaionManager 생성을 중복으로 하기 때문에 이미 생성한 AuthenticationManager를 설정해줘야 한다는 말씀 맞을까요?