개발자의 오르막
[SpringSecurity #08] 스프링시큐리티 아키텍처 정리 본문
# 스프링 시큐리티 아키텍처
1. 웹으로부터 요청이 들어오면 서블릿 필터 중 DeligatingFilterProxy 를 통해 들어온다.
(DeligatingFilterProxy 는 스프링부트를 사용할 때 자동적으로 등록된다)
2. 1번에서 특정한 Bean (SpringSecurityFilterChain) 에 필터 기능을 위임하여 스프링 시큐리티에
내장된 15가지 필터들을 사용하게 된다. (FilterChainProxy 를 통해)
3. 2번의 체인의 필터들은 WebScurity, HttpSecurity 를 사용하면서 만들어진다.
WebSecurityConfigurerAdater 를 상속하는 SecurityConfig 파일에서 우리 프로젝트에 맞는
security 설정을 해주면 내장된 필터들에 설정들이 자동적으로 반영된다.
- WebSecurity.java
/**
* <p>
* The {@link WebSecurity} is created by {@link WebSecurityConfiguration} to create the
* {@link FilterChainProxy} known as the Spring Security Filter Chain
* (springSecurityFilterChain). The springSecurityFilterChain is the {@link Filter} that
* the {@link DelegatingFilterProxy} delegates to.
* </p>
4. 위의 필터들이 사용하는 주요 객체들이 있는데, 이 중 인증에 관련된 객체가 AuthenticationManager,
인가에 관련된 객체는 AccessDecisionManager 를 사용한다.
5. 인증에서는 DaoAuthenticationProvider 를 통해 DB에 있는 회원 정보를 활용한다.
6. 인증 받은 정보들은 SecurityContextHolder 에 담겨 사용되고, 세션에 저장되어 사용된다.
7. 인증 뒤에는 FilterSecurityItenerceptor를 통해 인가를 받았는지 확인을 받는다.
이는 AccessDecisionManager 를 사용하고, AffirmativeBased 정책에 따라 인가한다.
8. WebExpressionVoter 은 SecurityExpressionHandler 를 통해 인가에 대한 커스텀을 할 수 있다.
'SpringFrameWork > SpringSecurity' 카테고리의 다른 글
[SpringSecurity #10] HeaderWriterFilter, CsrfFilter (0) | 2020.10.03 |
---|---|
[SpringSecurity #09] Spring Security Filter (0) | 2020.10.02 |
[SpringSecurity #07] AccessDecisionManager (0) | 2020.09.28 |
[SpringSecurity #06] 스프링 시큐리티 Filter와 FilterChainProxy (0) | 2020.09.27 |
[SpringSecurity #05] Authentication 와 SecurityContextHolder (0) | 2020.09.27 |