Spring 기반의 애플리케이션 보안을 담당하는 스프링 하위 프레임워크.
'인증'과 '권한'에 대한 부분을 Filter 흐름에 따라 처리.
보안 관련해서 많은 옵션을 제공해 주기 때문에 개발자 입장에서 보안관련 로직을 작성하지 않아도 된다는 장점이 있다.
Spring Security는 기본적으로 인증 절차를 거친 후에 인가 절차를 진행하게 되며, 인가 과정에서 해당 리소스에 대한 접근 권한이 있는지 확인을 하게 된다.
Spring Security에서는 이러한 인증과 인가를 위해 Principal을 아이디로, Credential을 비밀번호로 사용하는 Credential 기반의 인증 방식을 사용한다.
접근 주체(Principal) : 보호된 Resource에 접근하는 유저
비밀번호(Credential): Resource에 접근하는 대상의 비밀번호
인증(Authenticate) : 접근 주체가 누구인지 확인
텍스트인가(Authorize) : 어떤 Resource에 접근할 수 있는 권한이 있는지 검사(ex. admin, user)
권한 : 인증된 주체가 Resource를 접근할 수 있도록 권한을 결정
웹 요청 권한, 메소드 호출 및 도메인 인스턴스에 대한 접근 권한 부여로 두 가지 영역이 존재
SecurityContextPersistenceFilter SecurityContextRepository에서 SecurityContext를 가져오거나 저장하는 역할 담당
LogoutFilter 지정된 로그아웃 URL에 대한 요청을 감시하며, 매칭 되는 해당 유저를 로그아웃 처리
UsernamePasswordAuthenticationFilter 사용자명과 비밀번호로 이뤄진 폼 기반 인증에 사용하는 가상 URL요청을 감시하고 요청이 있으면 사용자의 인증을 진행
DefaultLoginPageGeneratingFilter 폼기반 또는 OpenID 기반 인증에 사용하는 가상 URL에 대한 요청을 감시하고 로그인 폼 기능을 수행하는데 필요한 HTML을 생성
BasicAuthenticationFilter HTTP 기본 인증 헤더를 감시하여 처리
RequestCacheAwareFilter 로그인 성공 후, 원래 요청 정보를 재구성하기 위해 사용
SecurityContextHolderAwareRequestFilter HttpServletRequestWrapper를 상속한
SecurityContextHolderAwareRequestWapper 클래스로 HttpServletRequest 정보를 감싼다.
SecurityContextHolderAwareRequestWrapper 클래스는 필터 체인상의 다음 필터들에게 부가정보를 제공
AnonymousAuthenticationFilter 이 필터가 호출되는 시점까지 사용자 정보가 인증되지 않았다면 인증 토큰에 사용자가 익명 사용자로 나타난다
SessionManagementFilter 인증된 주체를 바탕으로 세션 트래킹을 처리해 단일 주체와 관련한 모든 세션들이 트래킹 되도록 도운다.
ExceptionTranslationFilter 이 필터는 보호된 요청을 처리하는 중에 발생할 수 있는 예외를 위임하거나 전달하는 역할을 한다.
FilterSecurityInterceptor 이 필터는 AccessDecisionManager로 권한 부여 처리를 위임함으로써 접근 제어 결정을 쉽게 해 준다.
독립적인 운용을 지향
인증 및 권한 부여 모두에 대한 포괄적이고 확장 가능한 지원
세션 고정, 클릭재킹, 사이트 간 요청 위조 등의 공격으로부터 보호
서블릿 API 통합
Spring Web MVC와의 선택적 통합, 즉 독립적
사용자 권한에 따른 URI 접근 제어
DB와 연동하는 Local strategy 로그인
쿠키를 이용한 자동 로그인
패스워드 암호화
참고 https://spring.io/projects/spring-security, https://iyk2h.tistory.com/158