天天看點

CAS 用戶端驗證成功擷取更多使用者資訊

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>

以上紅色字型為新增部分。

解下來用戶端調用擷取設定的屬性資訊:

繼續閱讀