cas用戶端需要擷取更多的使用者資訊,需要對cas server做下修改,以支援傳回更多屬性資訊
1.修改WEB-INF/deployerConfigContext.xml配置檔案
找到id="authenticationManager" 的bean,為屬性credentialsToPrincipalResolvers增加自定義bean,該bean需實作org.jasig.cas.authentication.principal.CredentialsToPrincipalResolver接口:
<property name="credentialsToPrincipalResolvers">
<list>
[color=red]<!--add ,傳回用戶端更多認證資訊, linym, 2014-06-10-->
<bean id="userAttributeRepository" class="com.*.*.UserAttributeRepository" />[/color]
...
</list>
</property>
接下來需要修改WEB-INF/view/jsp/protocol/2.0/casServiceValidationSuccess.jsp增加傳回用戶端的屬性内容
<%@ 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>
[color=red]<c:if test="${fn:length(assertion.chainedAuthentications[fn:length(assertion.chainedAuthentications)-1].principal.attributes) > 0}">
<cas:attributes>
<c:forEach var="attr" items="${assertion.chainedAuthentications[fn:length(assertion.chainedAuthentications)-1].principal.attributes}">
<cas:${fn:escapeXml(attr.key)}>${fn:escapeXml(attr.value)}</cas:${fn:escapeXml(attr.key)}>
</c:forEach>
</cas:attributes>
</c:if> [/color]
<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>
以上紅色字型為新增部分。
解下來用戶端調用擷取設定的屬性資訊: