[ODOP] 91일차 - Authorization, FilterSecurityInterceptor
![[ODOP] 91일차 - Authorization, FilterSecurityInterceptor](/content/images/size/w1200/2023/08/-----2023-08-01----10.29.26-24.png)
- 인가 처리에 대한 내용
- 인가: 사용자가 자원에 접근할 자격이 있는지 확인하는 행위
- Spring Security 는 인증/인가 영역으로 나누어 보안을 처리한다
스프링 시큐리티가 지원하는 권한 계층
웹 계층
![](https://blog.pollra.com/content/images/2023/08/-----2023-09-01----4.52.30.png)
- URL 요청에 따른 메뉴 혹은 화면 단위의 레벨 보안
서비스 계층
![](https://blog.pollra.com/content/images/2023/08/-----2023-09-01----4.53.02.png)
- 화면 단위가 아닌 메소드 같은 기능 단위의 레벨 보안
도메인 계층(Access Control List, 접근 제어 목록)
![](https://blog.pollra.com/content/images/2023/08/-----2023-09-01----4.53.23.png)
- 객체 단위의 레벨 보안
FilterSecurityInterceptor
- 마지막에 위치한 필터로서 인증된 사용자에 대한 특정 요청의 승인/거부 여부를 최종적으로 결정
- 인증 객체 없이 보호자원에 접근을 시도 할 경우 AuthenticationException 을 발생
- 인증 후 자원에 접근 가능한 권한이 존재하지 않을 경우 AccessDeniedException 을 발생
- 권한 제어 방식 중 HTTP 자원의 보안을 처리하는 필터
- 권한 처리를 AccessDecisionManager에게 맡김
![](https://blog.pollra.com/content/images/2023/08/-----2023-09-01----4.53.52.png)
- 사용자가 접근을 요청한다
- 인증 객체 존재 유무를 판단한다
- 존재한다면 인가 로직을 계속해서 수행한다
- 조재하지 않는다면 AuthenticationException 을 발생시켜 인증 객체를 생성하도록 유도한다
- 권한 정보를 확인한다
- 권한 정보가 DB 혹은 메모리에 존재한다면 '권한이 필요한' 자원이므로 접근 확인 로직을 실행한다
- 권한 정보가 DB 혹은 메모리에 존재하지 않는다면 '권한이 필요없는' 자원이므로 접근 권한을 허용한다
- 해당 권한을 가지고 접근 가능한지 확인한다
- 접근할 수 있는 권한을 가지고 있다면 자원 접근을 허용한다
- 접근할 수 없는 권한이라면 AccessDeniedException 을 발생시킨다
MethodSecurityInterceptor
- 메소드에 접근 권한을 확인하는 로직이 포함된 구현체 이다
- 실제 동작은 AOP를 기반으로 동작한다