개발자의 오르막

[SpringSecurity #08] 스프링시큐리티 아키텍처 정리 본문

SpringFrameWork/SpringSecurity

[SpringSecurity #08] 스프링시큐리티 아키텍처 정리

계단 2020. 10. 2. 14:28

# 스프링 시큐리티 아키텍처

인프런 - 스프링시큐리티 백기선 인강 출처

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 를 통해 인가에 대한 커스텀을 할 수 있다.

Comments