Spring Acegi Tutorial
Spring Security(Acegi Security)에 대한 맛보기용 아티클로 매우 적당한 것 같습니다. 먼저 Acegi에서 흔히 사용하는 용어에 대해 설명을 하고, 간단한 애플리케이션을 통해 실제 Acegi를 적용하여 구동하고 있는 녀석을 살펴본 뒤에, 해당 샘플에서 사용한 필터들과 각각의 필터들의 종속성을 살펴보고 있습니다. 개인적으로는 이러한 구성이 어렵고 생소한 프레임워크를 공부하는데 가장 좋은 것 같습니다.
Acegi에서 사용하는 용어
- Authentication(인증) : "너는 누구냐?"
- principal(주체) : username
- credentials(신용) : password
- Authorization(권한) : "뭐 할려고?"
- object definitions : secured resources, 관계자외 출입 금지인 자원
샘플 애플리케이션 - 두 링크 모두 로그인으로 인증을 하며, 이때 validation을 해서 에러페이지로 이동시킬 수 있습니다.
- 특정 url과 role을 맵핑한 정보를 사용하여 권한 체크를 합니다.
샘플에서 사용한 필터들과 그들의 종속성
예전에 토비님께서 작성하셨던 "나의 Spring Acegi Security Framework 학습기"에 보면 더 많은 필터들이 있지만 일단 여기서는 위의 예제에서 사용한 httpSessionContextIntegrationFilter, authenticationProcessingFilter, exceptionTranslationFilter, filterInvocationInterceptor 네 개만 살펴보겠습니다.
1. AuthenticationProcessingFilter(위 그림에서 formAuthenticationProcessingFilter)
Http Request가 지나가는 첫 번째 필터로 인증과 관련된 요청을 처리하는데 특화된 필터 입니다. 즉, 로그인과 관련된 요청에 특화 되었기 때문에 폼 서브밋 URL 값(filterProcessUrl 속성)이나 로그인 실패시 URL 값(authenticationFailureUrl 속성)들을 설정합니다.
2. HttpSessionContextIntegrationFilter
위에서 살펴보았던 AuthenticationProcessingFilter가 사용하고 있는 AuthenticationManager에 의해 만들어지고 관리되는 Authentication 객체를 Thread Local을 사용하여(servlet이 thread기반이라..) 감싸서(wrap) 해당 쓰레드 내의 여러 request에서 같은 Authentication 객체를 공유할 수 있도록 하는 역할을 합니다.
3. ExceptionTranslationFilter
security 시스템의 중추적인 역할을 하는 두 개의 필터 중에 하나이며(다른 하나는 FilterSecurityInterceptor), 인증과 권한에 관련되어 발생하는 예외(AcegiSecurityException)를 잡아서 다음의 두 가지 중 하나로 처리 합니다.
- Authentication 객체 부재로 인한 예외 일 경우 : AuthenticationEntryPoint 를 사용하여 사용자에게 로그인을 요구함.
- FilterSecurityInterceptor에 의해 던져진 권한이 없어서 발생한 예외 일 경우 : 브라우저에게 SC_FORBIDDEN (HTTP 403) 에러를 던집니다.
4. FilterSecurityInterceptor
secured resources에 대한 정의를 담고 있습니다. 이곳에서 실제 특정 URL과 role을 맵핑하는 정보인 objectDefinitionSource 속성을 설정하고 있습니다. 이 속성을 설정할 때는 두 개의 dialect를 지정해 줍니다. 이름만 봐도 대강 짐작이 가는 dialect기 때문에 설정 내용을 살펴보시면 됩니다.