인가프로세스의 아키텍쳐
- FilterSeucrityInterceptor 가 인증정보, 요청정보, 권한정보를 추출
- AccessDecisionManager 에게 정보들을 주어 인가처리를 함
인증, 요청, 권한 정보의 수집
- 인증정보는 SecurityContext의 Authentication 객체에 있다.
- 요청정보는 FilterInvocation 객체를 생성해 요청정보를 저장한뒤 반환한다.
- 권한정보는 List 타입의 ConfigAttribute 으로 반환한다.
- 유저의 Request
- SecurityInterceptor 가 작동
- Authentication 에서 인증정보 추출
- FilterInvocation 에서 요청정보 추출
- 권한정보를 추출할 때는 ConfigAttribute 타입의 List를 반환
- SecurityInterceptor 가 이를 가지고 AccessDecisionManager 에게 심사요청
**권한 정보는 SpringSecurity 초기화시 Map<요청경로, 권한> 형태로 매핑된다.
인가처리를 위한 핵심 객체
최상위 인터페이스는 SecurityMetaDataSource 이다
- Collection<ConfigAttribute> getAttributes(Object object)
- Collection<ConfigAttribute> getAllConfigAttributes()
- boolean support(Class<?> clazz)
가장 중요한 메서드는 getAttriubutes() 이다.
SecurityMataDataSource 는 2가지 객체로 나뉜다.
- FilterInvocationSecurityMatadataSource : Url 방식의 권한 추출
- MethodSecurityMatadataSource : 메소드 방식의 권한 추출
Url 방식의 권한추출 클래스들
- DefaultFilterInvocationSecurityMetadataSource
- ExpressionBaseFilterInvocationSecurityMetadataSource
FilterInvocationSecurityMetadataSource 를 구현하여 DefaultFilterInvocationMetadataSource의 내용을 참고한다.
메서드 방식의 권한추출 클래스들
메서드 방식에는 클래스를 만들지 않고 구현되어 있는 클래스들을 사용하여 어노테이션을 사용한다.
- Jsr250MethodSecurityMetadataSource : @RolesAllowed("USER")
- SecuredAnnotationSecurityMetaSource : @Secured("ROLE_USER")
- PrePostAnnotationSecurityMetadataSource : @PreAuthorize("hasRole("user")"), @PostAuthorize("hasRole("user")")
- MapBasedMethodSecurityMetadataSource : 실제 DB 연동시 사용
'springframework > 시작하자SpringSecurity' 카테고리의 다른 글
40.FilterInvocationSecurityMetadataSource (2) (0) | 2020.09.30 |
---|---|
39.FilterInvocationSecurityMetadataSource (1) (0) | 2020.09.30 |
37. 동적 인가 방식 개요 (0) | 2020.09.30 |
39.Ajax 로그인 구현, CSRF (0) | 2020.09.30 |
38.AjaxLoginUrlAuthenticationEntryPoint, AjaxAccessDeniedHandler (0) | 2020.09.30 |