스프링 시큐리티 공식 문서를 읽고, 라이브러리 코드들을 뜯어보면서 공부했습니다.
인증은 username/password 인증을 기준으로 설명합니다.
스프링 시큐리티는 인증, 인가, 그리고 보안을 제공하는 프레임워크입니다.
Servlet Filter를 기반으로 인증, 인가를 수행합니다.
기본적으로 세션 & 쿠키 방식으로 인증을 합니다.
Authentication 객체를 이용해 현재 인증된 유저의 정보를 제공합니다.
이제부터 스프링 시큐리티의 필터들이 어떤 동작을 수행하는지 간단히 알아보겠습니다.
위 그림처럼 다양한 필터가 있는데, 여기서 인증과 관련된 주요 필터는 다음과 같습니다.
필터이름 | 역할 |
---|---|
LogoutFilter | 이 필터에 세팅해놓은 url에 접근했을 때, 로그아웃 시키는 필터 (default=/logout) |
UsernamePasswordAuthenticationFilter | Form 로그인으로 인증할때 사용하는 필터 |
BasicAuthenticationFilter | Http Basic 로그인으로 인증할떄 사용하는 필터 |
AnonymousAuthenticationFIlter | 이 필터에 도착했을때 SecurityContext에 Authentication 객체가 없다면(인증이 되지 않았다), 익명 사용자를 SecurityContext에 넣는다. |
ExceptionTranslationFilter | 인증 & 인가 예외를 처리하는 필터 |
FilterSecurityInterceptor | 현재 요청하는 자원, url을 보고, 현재 인증된 유저가 권한이 있는지 판단하고 접근 제어하는 필터 |
여기서 Form 로그인 또는 Http Basic 로그인 중 하나만 사용하여,
UsernamePasswordAuthenticationFilter와 BasicAuthenticationFilter는 동시에 사용되지 않고, 둘 중에 하나만 사용됩니다.
다음 장부터
1. Authentication Architecture
2. 로그인을 통해 유저가 인증 되는 과정 (Form 로그인, Http Basic 로그인)
3. AnonymousAuthenticationFilter, ExceptionTranslationFilter
에 대해 알아 보겠습니다.
개인적으로 공부한 내용을 정리한 글입니다.
지적, 피드백 환영합니다.