CAS Client는 WAS의 web.xml에 filter설정에 의하여 동작을 하게됩니다.
역시 구축 시에 정리해 놓는 것이 좋을 듯하여 슥삭슥삭... (물론 틀릴 가능성은 많습니다 ㅋㅋㅋ)
CAS Client Filter들은 그냥 정의해서는 되는게 아니랍니다. 다음과 같은 순서로 필터를 정의해야 합니다.
1. AuthenticationFilter
2. TicketValidationFilter
3. HttpServletRequestWrapperFilter
4. AssertionThreadLocalFilter
ㅁ 필수요소
- casServerLoginUrl: CAS 서버의 login URL을 정의합니다. ex) https://cas.vicki.co.kr:8443/login
- service: CAS서버로 메시지를 보낼 service URL을 정의합니다. ex) https://client.vicki.co.kr:8443/index.html
- serverName: 어플리케이션(클라이언트가 설치된)의 서버 이름을 정의합니다. ex) https://client.vicki.co.kr:8443
ㅁ 옵션
- renew: 갱신(renew) 시 CAS 서버에 전송 여부를 설정합니다.
- gateway: Gateway CAS 서버 전송 여부를 설정 (??????)
- artifactParameterName: ticket의 파라미터 이름을 정의
- serviceParameterName: service의 파라미터 이름을 정의
그 다음으로는 각 ticket 별 TickatValidationFilter 입니다. org.jasig.cas.client.validation.Cas10TicketValidationFilter
CAS 1.0 Protocol 입니다. (현재 프로젝트에서는 안쓰므로 일단 스킵) org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter
CAS 2.0 Protocol 입니다. (위와 마찬가지 이유로 스킵)
ㅁ 필수요소
- casServerUrlPrefix: CAS 서버 URL을 시작(prefix) ex) https://cas.vicki.co.kr:8443
ㅁ 옵션
- redirectAfterValidation(default: false): 티켓 validation 후에 티켓 파라미터 없이 같은 URL로 리다이렉트
- userSession(default: true): 세션에 Assertion을 저장할지 말지를 설정
- exceptionOnValidationFailure (default: true): 티켓 validation이 실패했을 때 exception을 던질지의 여부
- tolerance (default: 1000): SAML 티켓을 validating 할 때의 트리프트 클럭에 대한 내성
- renew (default: false): 갱신(renew) 시에 CAS 서버로 전송 여부를 설정
세번째로 HttpServletRequestWrapperFilter 입니다. org.jasig.cas.client.util.HttpServletRequestWrapperFilter
getRemoteUser() 와 getPrincipal() 메소드가 CAS과 관련있는 엔트리들을 반환하기 위해 HttpServletRequest를 랩핑
마지막으로 AssertionThreadLocalFilter 입니다. org.jasig.cas.client.util.AssertionThreadLocalFilter
접속할 필요가 있는 어플리케이션의 일부에 대한 ThreadLocal 내에 Assertion을 위치시킨다. Princial의 이름을 가져올 때에 HttpServletRequest에서는 접근을 할 수 없으며, getRemoteUser() 호출로는 불가능 하므로 위의 필터가 유용합니다. 아니 유용하답니다.