[Spring Security] 스프링 시큐리티의 필터
스프링 시큐리티
스프링 시큐리티는 스프링 기반 애플리케이션의 보안을 담당하는 스프링 하위 프레임워크다. 여기서 보안이란 인증(Authentication)과 인가(Authorization)이다.
- 인증: 접근 주체가 누구인지 판단하는 것
- 인가: 어떤 자원에 접근할 권한이 있는지/없는지를 판단하는 것
스프링 시큐리티는 서블릿 필터와 이들로 구성된 필터체인으로 보안과 관련된 처리를 수행한다.
필터와 필터체인
필터란 서블릿과 jsp의 실행 전처리, 후처리를 담당하는 객체이다.
스프링 시큐리티는 필터로 구성되어 있다. 클라이언트의 요청이 들어왔을 때 서버는 요청/응답 객체를 생성하고, 이 객체들을 서블릿에게 전달한다. 필터는 서블릿이 실행되기 전, 후에 실행된다. 이 과정을 전처리, 혹은 후처리라고 한다. 필터에는 인증을 관리하는 필터, 접근을 관리하는 필터가 존재한다.
어떤 사용자가 요청을 하면 인증 관리자 필터는 그 사용자에 대한 주체를 판단한다. 대표적인 예시로는 로그인이 있다. 그 후 접근 관리자 필터는 주체를 판단한 후 어떤 리소스에 대한 접근 권한을 갖고 있는지 확인한다. 이렇게 서로 관련 있는 필터끼리 구성되어 있는 것을 필터체인이라 한다.
- 필터를 이용한 전치리 작업의 예시
- 요청파라미터값에 대한 인코딩 처리
- 사용자인증/권한체크(Spring Security Frameworkd)
- 메세지 복호화
- 압축된 데이터에 대한 압축 해제 등의 작업
- 필터를 이용한 후처리 작업의 예시
- 메세지 암호화
- 응답 데이터 압축
처리 과정을 사진으로 살펴보면 다음과 같다.
필터를 통과한 요청의 처리
- 스프링에서 모든 url 요청을 접수받는 디스패처 서블릿으로 전달
- 서블릿은 url에 해당하는 컨트롤러를 실행
- 서블릿은 그 요청에 해당하는 view를 반환
- html을 응답으로 클라이언트에게 전달