AccessDecisionManager를 사용하는 곳이다.
AccessDecisionManager를 사용하여 Access Control 또는 예외 처리하는 필터.
대부분의 경우 FilterChainProxy의 제일 마지막 필터로 들어있다.
모든 요청마다 filter가 동작한다.
비 로그인 상태로 / 페이지 요청 시 authentication은 인증 되지 않을 사용자 이지만
attributes를 보면 permitAll 이기 때문에 예외를 던지지 않는다.
/dashboard 요청시에는 인증이 필요하다.
attributes와 authenticated를 보자
이 경우 실패한다. catch로 떨어진다.
SecurityContextHolder가 Authentication을 가지고 있다.
AuthenticationManager를 통해서 Authentication을 인증을 하고
결과로 나온 나온 Authentication을 SecurityContextHolder에 넣어 주는 일을 UsernamePasswordAuthenticationFilter, SecurityContextPersistenceFilter 같은 필터들에서 한다.
이러한 필터들은 FilterChainProxy를 통해서 묶여있고 순차적으로 실행한다.
FilterChainProxy는 DelegatingFilterProxy를 통해서 요청을 전달 받았다. 스프링 부트 사용시 자동으로 등록 된다.