개발자의 오르막
[SpringSecurity] 스프링 시큐리티 개념 본문
참조문서
1. 스프링 시큐리티 정의
스프링 시큐리티란 스프링 기반의 어플리케이션의 인증과 권한을 담당하는 프레임워크이다.
매 요청마다 올바른 권한을 가진 사용자가 인증 절차를 확인하였는지에 대한 검증을 해준다.
Spring Security 는 Filter 기반으로 동작하며 XML 을 따로 작성하지 않고, JAVA Bean 으로 컨트롤 할 수 있다.
위의 그림과 같이 스프링 시큐리티는 필터 기반으로 사용자의 요청을 전처리 하거나, 서버의 응답을
후처리 하는 방식으로 이루어진다.
위와 같은 Filter Chain 을 통해 각 필터에서 사용자의 Request 에 대한 권한과 인증 절차가
이루어지며, Request, Response 는 의도에 따라 전처리, 후처리가 진행된다.
위의 Filter 들에 대한 설정은 JAVA Bean 의 형태로 각 프로젝트에 맞게 Custom 을 진행할 수 있다.
2. 자동으로 설정되는 10개의 Spring Security Filter
1. SecurityContextPersistenceFilter
: SecurityContextRepository 에서 SecurityContext 를 로딩하거나 SecurityContextRepository 로
SecurityContext 를 저장하는 역할을 한다. SecurityContext 란 사용자의 보호 및 인증된 세션을 의미한다.
2. LogoutFilter
: 로그아웃 URL로의 요쳥을 감시하며 해당 사용자를 로그아웃 시킨다.
3. UsernamePasswordAuthenticationFilter
: 아이디와 비밀번호를 사용하는 폼기반 인증 요청 URL 을 감시하며 사용자를 인증하는 역할을 한다.
4. DefaultLoginPageGeneratingFilter
: 폼 또는 OpenId 기반 인증을 위한 로그인폼을 감시하고 이와 관련된 로그인 폼을 생성한다.
5. BasicAuthenticationFilter
: HTTP 기본 인증 헤더를 감시하여 처리한다.
6. RequestCacheAwareFilter
: 로그인 성공 후, 원래 요청 정보를 재구성하기 위해 사용된다.
7. SecurityContextHolderAwareRequestFilter
: HttpServletRequestWrapper 를 상속한 SecurityContextHolderAwareRequestWrapper 클래스로
HttpServletRequest 정보를 감싼다. SecurityContextHolderAwareRequestWrapper 클래스는 필터
체인 상의 다음 필터들에게 부가정보를 제공한다.
8. AnonymousAuthenticationFilter
: 이 필터가 호출되는 시점까지 사용자 정보가 인증되지 않았다면 인증토큰에 사용자가 익명 사용자로
나타난다.
9. SessionManagementFilter
: 이 필터는 인증된 사용자와 관련된 모든 세션을 추적한다.
10. ExceptionTranslationFilter
: 이 필터는 보호된 요청을 처리하는 중에 발생할 수 있는 예외를 위임하거나 전달하는 역할을 한다.
11. FilterSecurityInterceptor
: 이 필터는 AccessDecisionManager 로 권한부여 처리를 위임함으로써 접근 제어 결정을 쉽게 해준다.
12. AbstractAuthenticationProcessingFilter
: 웹 기반 인증요청에서 사용되는 컴포넌트로 POST 폼 데이터를 포함하는 요청을 처리한다.
사용자 비밀번호를 다른 필터로 전달하기 위해서 Authentiaction 객체를 생성하고 일부 프로퍼티를 설정한다.
13. AuthenticationManager
: 사용자 비밀번호를 인증하는 역할을 담당한다. 인증에 실패하면 예외를 던지기도 하고, 성공하면 Authentication
객체의 모든 프로퍼티를 완성한다. 이렇게 Authentication 객체에 채워지는 값에는 권한 정보도 포함되어 있다.
14. AuthenticationProvider
: AuthenticationManager 에게 비밀번호 인증기능을 제공하는 역할을 한다.
데이터베이스를 참조하여 비밀번호를 인증하기도 한다.
'SpringFrameWork > SpringSecurity' 카테고리의 다른 글
[SpringSecurity #15] 스프링 시큐리티 데이터 연동 (0) | 2020.10.06 |
---|---|
[SpringSecurity #14] 스프링 메소드 시큐리티 (0) | 2020.10.05 |
[SpringSecurity #13] 타임리프 스프링 시큐리티 (0) | 2020.10.05 |
[SpringSecurity #12] Security Custom Filter 만들기 (0) | 2020.10.04 |
[SpringSecurity #11] Security Auth 관련 Filter (0) | 2020.10.03 |