DB와 연동하여 자원 및 권한을 설정하고 제어함으로 동적 권한 관리가 가능하도록 한다.
설정 클래스 소스에서 권한 관련 코드 모두 제거
관리자 시스템 구축
권한 계층 구현
Git 참고하면되지만, 사실상 의미없음. 예제가 너무 불친절.
http.antmatchers("/user").access("hasRole('USER')")
→ **사용자(인증정보)**가 **/user 자원(요청정보)**에 접근하기 위해서는 **ROLE_USER 권한(권한정보)**이 필요하다
인증정보(Authentication)은 SecurityContext에서 얻는다.
요청정보는 FilterInvocation클래스를 생성해서 request 정보를 얻는다.
권한정보는 설정클래스에서 설정한 내용(ex: hasRole('USER'))을 파싱해서 얻어낸다.
→ 내부적으로 스프링 시큐리티가 초기화 될 때 설정했던 내용들(ex: http.antmatchers("/user").access("hasRole('USER')")
)
에서 자원정보와 권한정보를 꺼내어 Map객체에 key(자원정보), value(권한정보)를 저장합니다.
⇒ 사용자가 자원요청을 할 경우 보안필터(SecurityInterceptor
)가 요청을 받은 뒤 인증
, 요청
, 권한
정보들을 얻어서 접근 결정 관리자(AccessDecisionManager
)에게 전달합니다.