보안 설정을 담당하는 스프링 하위 프레임워크. 인증, 인가를 Filter Chain
에서 처리한다. 이 때, 인증 필터가 인가 필터보다 앞쪽 단에 위치하므로 인증에 성공한 요청만이 인가 프로세스로 진입 가능하다. 클라이언트 요청이 Dispatcher Servlet
에 도달하기 이전에 인증 및 인가를 수행함
Dispatcher Servlet?
HTTP 프로토콜로 들어오는 모든 요청을 가장 먼저 받아 적합한 컨트롤러에 위임해주는 프론트 컨트롤러(MVC 구조에서 클라이언트의 모든 요청을 디스패처 서블릿으로 가장 먼저 도달)
FilterSecurityInterceptor
에서 인가 처리를 AccessDecisionManager
에게 위임한다. (이 때 인증, 요청, 권한 등의 정보를 전달)
그럼 전달받은 정보를 Voter
들에게 넘겨 자원 접근에 대한 찬/반 여부를 묻는다.(접근 허용 여부 리턴)
웹 어플리케이션 또는 REST API에서 권한을 관리(인가)할 때 실제 처리를 담당하는 부분은 AccessDecisionManager
이다.
e.g. 인증객체 없이 자원에 접근하거나, 자원에 대한 권한이 없는 경우 접근 제어
여러 개의 Voter
를 가진다. 각각의 Voter를 거치며 유효한 지 확인한다. 스프링 시큐리티는 기본적으로 3개의 유형(인터페이스)을 제공한다.
각각의 Voter
들은 판단을 심사하여 AccessDecisionManager
로 값을 리턴한다.
Return Value
- ACCESS_GRNTED: 접근 허용
- ACCESS_ABSTAIN: 접근 보류
- ACCESS_DENIED: 접근 거부