티스토리 뷰

반응형

Spring Security (스프링 시큐리티)

스프링 시큐리티를 이용하면 개발시에 필요한 사용자의 인증, 권한, 보안 처리를 간단하지만 강력하게 구현 할 수 있습니다.  일반적인 웹 환경에서 브라우저가 서버에게 요청을 보내게 되면, DispatcherServlet(FrontController)가 요청을 받기 이전에 많은 ServletFilter(서블릿 필터)거치게 됩니다. Spring Security도 서블릿 필터로써 작동하여 인증, 권한과 관련한 처리를 진행하게 됩니다. (본래 서블릿필터는 WAS(Web Application Server)에서 담당하는데 스프링은 이 서블릿필터들을 직접 관리하기 위해서  DelegatingFilterProxy를 web.xml에 설정하여서, 스프링에서 설정된 서블릿 필터 빈 객체를 거치게 됩니다.) 


SecurityFilterChain

Security와 관련한 서블릿 필터도 실제로는 연결된 여러 필터들로 구성 되어 있습니다. 이러한 모습때문에 Chain(체인)이라는 표현을 쓰고 있습니다. 해당 필터들의 역할과 흐름을 알고 있어야 필터의 커스터마이징을 진행 할 수있습니다. 


이미지 출처 : http://atin.tistory.com/590


  • SecurityContextPersistenceFilter - 요청(request)전에, SecurityContextRepository에서 받아온 정보를 SecurityContextHolder에 주입합니다.
  • LogoutFilter - 주체(Principal)의 로그아웃을 진행합니다. 주체는 보통 유저를 말합니다.
  • UsernamePasswordAuthenticationFilter - (로그인) 인증 과정을 진행합니다.
  • DefaultLoginPageGeneratingFilter - 사용자가 별도의 로그인 페이지를 구현하지 않은 경우, 스프링에서 기본적으로 설정한 로그인 페이지를 처리합니다.
  • BasicAuthenticationFilter - HTTP 요청의 (BASIC)인증 헤더를 처리하여 결과를 SecurityContextHolder에 저장합니다.
  • RememberMeAuthenticationFilter - SecurityContext에 인증(Authentication) 객체가 있는지 확인하고RememberMeServices를 구현한 객체의 요청이 있을 경우, Remember-Me(ex 사용자가 바로 로그인을 하기 위해서 저장 한 아이디와 패스워드)를 인증 토큰으로 컨텍스트에 주입합니다.
  • AnonymousAuthenticationFilter - SecurityContextHolder에 인증(Authentication) 객체가 있는지 확인하고, 필요한 경우 Authentication 객체를 주입합니다.
  • SessionManagementFilter - 요청이 시작된 이 후 인증된 사용자 인지 확인하고, 인증된 사용자일 경우SessionAuthenticationStrategy를 호출하여 세션 고정 보호 메커니즘을 활성화하거나 여러 동시 로그인을 확인하는 것과 같은 세션 관련 활동을 수행합니다.
  • ExceptionTranslationFilter - 필터 체인 내에서 발생(Throw)되는 모든 예외(AccessDeniedException, AuthenticationException)를 처리합니다.
  • FilterSecurityInterceptor - HTTP 리소스의 보안 처리를 수행합니다.




반응형
댓글