웹요청을 가로챈 후 사용자를 인증하고 인증된 사용자가 적절한 권한을 지니고 있는지 확인하는 과정으로 인증, 인가가 이뤄진다.
디자인 패턴 중 하나로 작업 요청을 받은 객체가 실제 작업자에게 책임을 위임하는 구조에서 사용되는 기법으로
작업자 간 연결고리를 통해 새로운 작업자를 중간에 추가하거나 삭제하는 것이 용이한 구조로 스프링에서 사용자 요청에 대한 인증, 인가 작업을 처리하는 스프링 시큐리티에서 사용되는 구조가 대표적인 Chain of Responsibility의 사용 예시이다.
보안과 관련된 인증과 인가가 이뤄지는 과정이 동작하기 위해 구현된 아키텍처의 핵심 기능으로 웹요청을 수신한 서블릿 컨테이너 상의 FilterChain 중 하나인 DelegatingFilterProxy에서 Spring Security와 관련된 기능들을 담당하는 FilterChainProxy에 작업을 위임하게 되고 FilterChainProxy는 FilterChain 구현체 Filter들로 인증, 인가 작업을 위임하게 된다.
Filter 이름 | 설명 |
---|---|
ChannelProcessingFilter | 웹 요청이 어떤 프로토콜로 (http 또는 https) 전달되어야 하는지 처리 |
SecurityContextPersistenceFilter | SecurityContextRepository를 통해 SecurityContext를 Load/Save 처리 |
LogoutFilter | 로그아웃 URL로 요청을 감시하여 매칭되는 요청이 있으면 해당 사용자를 로그아웃 시킴 |
UsernamePasswordAuthenticationFilter | ID/비밀번호 기반 Form 인증 요청 URL(기본값: /login) 을 감시하여 사용자를 인증함 |
DefaultLoginPageGeneratingFilter | 로그인을 수행하는데 필요한 HTML을 생성함 |
RequestCacheAwareFilter | 로그인 성공 이후 인증 요청에 의해 가로채어진 사용자의 원래 요청으로 이동하기 위해 사용됨 |
SecurityContextHolderAwareRequestFilter | 서블릿 3 API 지원을 위해 HttpServletRequest를 HttpServletRequestWrapper 하위 클래스로 감쌈 |
RememberMeAuthenticationFilter | 요청의 일부로 remeber-me 쿠키 제공 여부를 확인하고, 쿠키가 있으면 사용자 인증을 시도함 |
AnonymousAuthenticationFilter | 해당 인증 필터에 도달할때까지 사용자가 아직 인증되지 않았다면, 익명 사용자로 처리하도록 함 |
ExceptionTranslationFilter | 요청을 처리하는 도중 발생할 수 있는 예외에 대한 라우팅과 위임을 처리함 |
FilterSecurityInterceptor | 접근 권한 확인을 위해 요청을 AccessDecisionManager로 위임 |
HTTPS(HyperT ext Transfer Protocol Secure)는 HTTP 프로토콜의 암호화 버전으로 SSL(Secure Sockets Layer)을 사용하게 되면 클라이언트와 주고 받는 모든 데이터가 암호화 되어 있게 된다.