728x90

- 사용자가 접근하고자 하는 Url 자원에 대한 권한 정보 추출
- AccessDecisionManager에게 전달하여 인가처리 수행
- DB로부터 자원 및 권한 정보를 매핑하여 Map객체로 관리
- 사용자의 매 요청마다 요청정보에 매핑된 권한 정보 확인

- 사용자의 요청을 FilterSecurityInterceptor가 받는다.
- 권한정보를권한 정보를 추출하기 위해 우리가 작성한 FilterInvocationSecurityMetadataSource에서 권한 정보를 추출한다.
- DB에서 정보를 얻어 자원/권한에 매칭되도록 Map으로 저장한 뒤 권한 목록을 다시 Filter에 반환한다.
- Filter 추가

FilterSecurityInterceptor 전에 내가 만든 Filter를 동작시킨다. 

내가 만든 MetaDataSource 
AcessManagerDecistion
-
public class UrlFilterInvocationSecurityMetadataSource implements FilterInvocationSecurityMetadataSource { private LinkedHashMap<RequestMatcher, List<ConfigAttribute>> requestMap = new LinkedHashMap<>();//자원 / 권한List @Override public Collection<ConfigAttribute> getAttributes(Object object) throws IllegalArgumentException { //object = FilterInvocation HttpServletRequest request = ((FilterInvocation) object).getRequest();//사용자의 요청정보 추출 //DB에서 읽어오는 것이 아닌 내가 직접 데이터를 넣는다. requestMap.put(new AntPathRequestMatcher("/mypage"), Arrays.asList(new SecurityConfig("ROLE_USER"))); if(requestMap != null){ for(Map.Entry<RequestMatcher, List<ConfigAttribute>> entry : requestMap.entrySet()) { RequestMatcher matcher = entry.getKey(); if (matcher.matches(request)) {//사용자의 요청정보랑 Map에 존재하는 URL과 일치하는지를 본다 return entry.getValue(); //null이 아니기 떄문에 인가 처리를 진행한다. } } } return null; //Null을 리턴하여 더이상 인가 처리를 하지 않는다.(AbstractSecurityInterceptor) } @Override public Collection<ConfigAttribute> getAllConfigAttributes() { Set<ConfigAttribute> allAttributes = new HashSet<>(); for (Map.Entry<RequestMatcher, List<ConfigAttribute>> entry : requestMap .entrySet()) { allAttributes.addAll(entry.getValue()); } return allAttributes; } @Override public boolean supports(Class<?> clazz) { //타입 검사 return FilterInvocation.class.isAssignableFrom(clazz); } } 
동작과정 총 정리
728x90
'스프링 시큐리티 > 실전프로젝트 - 인가 프로세스 DB 연동 웹 계층 구현' 카테고리의 다른 글
| ch06. 웹 기반 인가처리 실시간 반영하기 (0) | 2022.01.24 |
|---|---|
| ch05. 웹 기반 인가처리 DB 연동 - FilterInvocationSecurityMetadataSource (2) (0) | 2022.01.24 |
| ch03. 웹 기반 인가처리 DB 연동 - 주요 아키텍처 이해 (0) | 2022.01.24 |
| ch02. 관리자 시스템 - 권한 도메인, 서비스, 리포지토리 구성 (0) | 2022.01.23 |
| ch01. 스프링 시큐리티 인가 개요 (0) | 2022.01.23 |