[CAS] Cas20ProxyReceivingTicketValidationFilter을 이용할 때 attributes 값을 얻어올 수 없는 경우



CasValidationFilter 를 Cas20ProxyReceivingTicketValidationFilter 로 테스트 했을 때, principal.getAttributes() 가 null 로 반환되어 어쩔 수 없이 Saml11TicketValidationFilter 를 사용하였습니다.


오늘 CAS Client 설정 메뉴얼을 작성하면서 Cas20ProxyReceivingTicketValidationFilter 로 설정하도록 한 것 때문에 같이 연동을 했던 분이 attributes 를 가지고 올 수 없었습니다.

당근 아저씨한테 물어보니 맨 처음 썼던 것 처럼 null 로 반환되는 문제 때문에 SAML로 하셨다고 하네요...


혹시 무언가 방법이 있을 것 같아 찾아보니 아래와 같은 방법이 있었습니다.



http://www.ja-sig.org/issues/browse/CAS-655



위의 방법은 CAS Server 의 /WEB-INF/view/jsp/protocol/2.0/casServiceValidationSuccess.jsp 파일을 수정하는 것이었습니다.





<%@ page pageEncoding="UTF-8"%>




<%@ page session="false" %><%@ taglib prefix="c" uri="



http://java.sun.com/jsp/jstl/core



" %><%@ taglib uri="



http://java.sun.com/jsp/jstl/functions



" prefix="fn" %><cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas'>



<cas:authenticationSuccess>



<cas:user>${fn:escapeXml(assertion.chainedAuthentications[fn:length(assertion.chainedAuthentications)-1].principal.id)}</cas:user>





<cas:attributes>



<c:forEach var="attr"



items="${assertion.chainedAuthentications[fn:length(assertion.chainedAuthentications)-1].principal.attributes}"



varStatus="loopStatus" begin="0"



end="${fn:length(assertion.chainedAuthentications[fn:length(assertion.chainedAuthentications)-1].principal.attributes)-1}"



step="1"><cas:${fn:escapeXml(attr.key)}>${fn:escapeXml(attr.value)}</cas:${fn:escapeXml(attr.key)}>



</c:forEach>



</cas:attributes>





<c:if test="${not empty pgtIou}">



<cas:proxyGrantingTicket>${pgtIou}</cas:proxyGrantingTicket>



</c:if>



<c:if test="${fn:length(assertion.chainedAuthentications) > 1}">



<cas:proxies>



<c:forEach var="proxy" items="${assertion.chainedAuthentications}" varStatus="loopStatus" begin="0" end="${fn:length(assertion.chainedAuthentications)-2}" step="1">



<cas:proxy>${fn:escapeXml(proxy.principal.id)}</cas:proxy>



</c:forEach>



</cas:proxies>



</c:if>



</cas:authenticationSuccess>



</cas:serviceResponse>



해당 파일을 열고 붉은 부분을 추가합니다. pageEncoding 은 해당 서버의 charset 에 맞게 설정합니다.




잘 나오는 것을 확인하였습니다. 일단 CAS 2.0 protocol 을 사용하는 것이 옵션도 많아서 일단은 이걸로 쭉~ 가볼 생각입니다.



댓글

가장 많이 본 글