Acegi Security에 포함되어 있는 것은 시스템에서 제공하는 기본적인 보안 기능들을 시연해 줄 수 있는 매우 간단한 예제이다(그리고 만약 여러분이 컨테이너를 사용하고 있다면 여러분의 컨테이너 어댑터가 적절히 설정되어 있는지 확인한다).
만약 여러분이 서브 버전으로부터 빌드했다면 연락처 예제 애플리케이션은
다음과 같은 세 개의 배치가능한 버전을 포함하고 있을 것이다.
acegi-security-sample-contacts-filter.war는 HTTP 세션 인증 접근법을 이용하여
설정되어 있다. acegi-security-sample-contacts-ca.war는 컨테이너 어댑터를
사용하도록 설정되어 있다. 마지막으로 acegi-security-sample-contacts-cas.war는
JA-SIG CAS 서버에서 동작하도록 설계되어 있다. 여러분이 단순히 예제 애플리케이션이
동작하는지만을 알고 싶다면 acegi-security-sample-contacts-filter.war를
사용했으면 하는데, 왜냐하면 이것은 여러분의 컨테이너에 특별한 설정을 필요로 하지 않기
때문이다. 게다가 이것은 공식 릴리즈의 ZIP 파일에 포함되어 있기도 하다.
예제를 배치하려면 단순히 해당 WAR 파일을 Acegi Security 배포판으로부터 여러분 컨테이너의 webapps 디렉터리에 복사해 넣기만 하면 된다.
컨테이너를 시작한 다음 애플리케이션이 올라오는지 확인한다.
http://localhost:8080/aceg-security-sample-contacts-filter(아니면 여러분의
웹 컨테이너와 배치한 WAR에 적절한 URL)를 방문해 보면 임의의 연락처가
나타나야만 한다. "Refresh"을 몇번 클릭하면 서로 다른 연락처들을 보게 될 것이다.
이러한 임의의 연락처를 제공하는 비즈니스 메소드는 보호되어 있지 않다.
다음으로 "Debug"를 클릭한다. 여러분은 인증받게 될 것이며, 이어서 사용자명과 비밀번호를 그 페이지에 제시할 것이다. 단순히 이러한 정보들로 인증하고 결과 페이지를 보여줄 것이다. 결과 페이지에는 아래와 유사한 성공했다는 내용의 메시지를 포함하고 있어야 한다:
Context on SecurityContextHolder is of type: org.acegisecurity.context.SecurityContextImpl
The Context implements SecurityContext.
Authentication object is of type: org.acegisecurity.adapters.PrincipalAcegiUserToken
Authentication object as a String: org.acegisecurity.adapters.PrincipalAcegiUserToken@e9a7c2: Username: marissa; Password: [PROTECTED]; Authenticated: true; Granted Authorities: ROLE_TELLER, ROLE_SUPERVISOR
Authentication object holds the following granted authorities:
ROLE_TELLER (getAuthority(): ROLE_TELLER)
ROLE_SUPERVISOR (getAuthority(): ROLE_SUPERVISOR)
SUCCESS! Your [container adapter|web filter] appears to be properly configured!
만약 다른 메시지를 보게 되면, acegi-security-sample-contacts-ca.war를 배치하고,
본 참조 가이드의 다른 곳에 설명되어 있는 대로 여러분의 컨테이너 어댑터를
설정했는지 확인하도록 한다.
일단 성공적으로 위 메시지를 받았다면 예제 애플리케이션의 기본 페이지로 돌아가서
"Manage"를 클릭한다. 그렇게 하면 여러분은 애플리케이션을 시험할 수 있다.
주의할 점은 현재 로그인한 사용자에게 사용가능한 연락처만이 표시되며,
ROLE_SUPERVISOR인 사용자에게만 연락처를 삭제할 권한이 주어진다는 점이다.
이러한 것의 배후에는 MethodSecurityInterceptor가 비즈니스 객체를 보호하고 있다.
여러분이 acegi-security-sample-contacts-filter.war나
acegi-security-sample-contacts-cas.war를 사용하고 있다면
FilterSecurityInterceptor는 HTTP 요청도 보호한다. 이러한 WAR를 사용하고 있다면
http://localhost:8080/contacts/secure/super를 방문하여
FilterSecurityInterceptor에 의해 접근이 거부되는 것을 확인한다.
예제 애플리케이션은 여러분이 다른 연락처와 연결되어 있는 접근 제어 목록을 변경할 수
있도록 해준다는 것을 알아둔다. 이러한 것들을 해보고 예제 애플리케이션의 애플리케이션
컨텍스트 XML 파일을 살펴봄으로써 작동방법을 이해하도록 한다.
또한 연락처 예제 애플리케이션은 클라이언트 디렉터리도 포함하고 있다.
여러분은 클라이언트 디렉터리 내에서 몇몇 웹 서비스 프로토콜을 이용하여
뒷단의 비즈니스 객체를 조회하는 자그마한 예제를 발견하게 될 것이다.
이러한 예제들은 Spring 원격 프로토콜을 이용하여 인증에 Acegi Security를
어떻게 사용하는지 보여준다. 클라이언트를 해보려면 여러분의 서블릿
컨테이너가 여전히 연락처 예제 애플리케이션을 실행하고 있는지를 확인한 다음
client marissa koala를 실행한다. 명령행 파라미터는
각각 사용할 사용자명과 비밀번호를 나타낸다. 알아둘 것은 여러분이 다른 대상
URL을 사용하려면 client.properties를 편집해야 한다는 것이다.
예제 애플리케이션의 클라이언트는 현재는 CAS를 지원하지 않는다는 것에 주의한다.
그럼에도 불구하고 만약 여러분이 의욕적이라면 다음과 같이 시도해 볼 수는 있을 것이다:
client _cas_stateless_YOUR-SERVICE-TICKET-ID.