-
[스프링 시큐리티] 자원 접근 허용 여부 검증(Authorization, FilterSecurityInterceptor)강의노트/스프링 시큐리티 2020. 9. 23. 22:04
Authorization
- 인증을 받은 클라이언트가 어떤 자원에 접근하려 할 때 그 자원에 접근할 수 있는 권한을 가지고 있는지 검증하는 것이다.
스프링 시큐리티가 지원하는 권한 계층
- 웹 계층
- URL 요청에 따른 메뉴 혹은 화면 단위의 레벨 보안
- 서비스 계층
- 화면 단위가 아닌 메소드 같은 기능 단위의 레벨 보안
- 도메인 계층 (Access Control List, 접근 제어 목록)
- 객체 단위의 레벨 보안
FilterSecurityInterceptor
- 스프링 Security가 가지고 있는 필터들 중에서 가장 마지막에 위치한 필터로써 인증된 사용자에 대하여 특정 요청의 승인/거부를 최종적으로 결정한다.
- 인증 객체 없이 보호자원에 접근을 시도할 경우 AuthenticationException을 발생 시킨다.
- 인증 여부는 SecurityContext에 인증 객체 유무로 판단한다.
- 인증 후 자원에 접근 가능한 권한이 존재하지 않을 경우 AccessDeniedException을 발생 시킨다.
- 권한 제어 방식 중 HTTP 자원의 보안을 처리하는 필터이다.
- 권한 처리를 AccessDecisionManager에게 위임한다.
코드 분석
ExceptionTranslationFilter에서 다음 필터를 호출(chain.doFilter(request, response))하면서 해당 부분을 catch문을 통해서 예외를 처리하고 있다.
ExceptionTranslationFilter 다음에 호출 되는 필터가 FilterSecurityInterceptor 필터이다.
this.obtainSecurityMetadataSource().getAttributes() 함수를 통해서 권한 정보를 조회한다.
SecurityContextHolder.getContext().getAuthentication() 함수를 통해서 인증 객체가 있는지 확인한다.
최종 인가 처리는 this.accessDecisionManager.decide() 함수를 통해서 위임한다.
'강의노트 > 스프링 시큐리티' 카테고리의 다른 글
[스프링 시큐리티] 자원 접근 허용 여부 결정 주체 (AccessDecisionManager, AccessDecisionVoter) (0) 2020.10.07 [스프링 시큐리티] 인증 여부 결정 주체(AuthenticationProvider) (0) 2020.09.23 [스프링 스큐리티] 인증 여부 검증(AuthenticationManager) (0) 2020.09.14 [스프링 시큐리티] Authentication Flow (0) 2020.09.14 [스프링 시큐리티] SecurityContext 객체 생성, 저장, 조회(SecurityContextPersistenceFilter) (0) 2020.09.14