저번 시간까지 방식으로 인가 URL 프로세스를 구성 했다면 이번 시간부터는 메소드 방식으로 인가프로세스 DB연동을 구성해 볼것이다.
애노테이션으로 구성하는방법과 웹 기반으로 구성하는 방법이 있다.
애노테이션 방법 부터 살펴보자.
@PreAuthorize =말 그대로 메서드를 사용하기전 미리 권한을 검사 한다는 내용이다. 예제와 같이 조건에따라 권한 검사가 가능하다.
두분류의 어노테이션의 가장 큰 차이는 SpEL 지원여부이다.
이 어노테이션들은 @ENableGlobalMethodSecurity를 선언해 줘야 사용이 가능하다.
@PreAuthorize 부분에 #을 쓰면 해당 객체에 대한 참조가 가능하다.
ROLE_USER권한이 있어야 하며 파라미터로온 account.username 과 인증된 객체의 이름 principal.username 이 같아야 된다.
그리고 이것을 map 에 저장해준다. 왜냐하면 나중에 이메소드 호출할때 관련 권한정보를 가져오기위해서 이다.
@Secured 나 @RoleAllowwed 도 초기화때 애노테이션에 있는 권한정보를 읽고 SecuredAnnotationSecurityMetadataSource 에 파싱한뒤에 DelegatingMehodSecurityMetadataSource 안에 있는 map 에 저장한다.
애노테이션이 권한설정이 활성화되면 클라에서 메서드 요청을 하면 MethodSecurityInterceptor에서 제일 먼저 받는다.
그리고 저(파란색) 부분에서 인가처리가 일어난다
- @EnableGlobalMethodSecurity 부분을 true 로 설정해준다
- ture로 설정 해주면 methodSecurityMetadataSource 인터페이스에 있는 PrepostAnootaionSecurityMetadataSource 클래스나 ecuredAnnotationSecurityMetadataSource 클래스가 빈으로 활성화 되서 애노테이션을 사용할수 있게된다.
- 애노테이션으로 메서드 권한 설정을 해준다. 초기화할때 이 권한정보를 읽어들여 각각 애노테이션에 해당하는 객체들안에 파싱해준다. 그 이후에 DelegatingMehodSecurityMetadataSource 안에 있는 map 에 저장한다.
- MethodSecurityInterceptor에서 가장먼저 클라이언트의 메서드 접근 리퀘스트를 받으며 Interceptor는 MethodSecurityMetadataSource를 가지고 있으며 그안에 해당하는 애노테이션 권한정보들을 가져와 클라의 인증한 객체의 권한과 비교해 인가 심사를 한다.
- MethodSecurityIntercepotr 는 클라의 리퀘스트를 가장 먼저 받으며 위에 methodSecurityMetadataSource를 포함한다