CAS實現中文的屬性

wangjianme 12年前發布 | 62K 次閱讀 CAS SSO OpenID/單點登錄SSO

casServiceValidationSuccess.jsp頁面默認編碼格式為ISO-8859-1,且在表單提交到客戶端頁面時,也使用IS0進行編碼,為了處理中文,可以在頁面上使用URLEncoder對需要傳遞的中文時行UTF-8編碼,然后從客戶端取得數據時,再做URLDecoder解碼:

casServiceValidationSuccess.jsp頁面,真是一個奇怪的頁面,由于cas使用手工解析(沒有使用任何dom解析,硬編碼識別標標簽的開始和標簽的結束)xml的方式解析xml文件,所有,在修改此文件時,一定要加以注意:

以下是源代碼

<%@ page session="false" contentType="text/xml; charset=UTF-8" import="java.net.URLEncoder"%>

<%@ 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>

       <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:attributes>

           <c:forEach items="${assertion.chainedAuthentications[fn:length(assertion.chainedAuthentications)-1].principal.attributes}"var="attr">

                  <c:set var="val" value="${attr.value}"/>

                  <cas:${attr.key}><%=URLEncoder.encode((String)pageContext.getAttribute("val"),"UTF-8")%></cas:${attr.key}>

           </c:forEach>

       </cas:attributes>

    </cas:authenticationSuccess>

</cas:serviceResponse>

經過編碼以后的XML數據如下:

<cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas'>

    <cas:authenticationSuccess>

       <cas:user>U003</cas:user>

        <cas:attributes>

                  <cas:pwd>1111</cas:pwd>

                  <cas:username>%E5%BC%A0%E4%B8%89</cas:username>

       </cas:attributes>

    </cas:authenticationSuccess>

</cas:serviceResponse>

 

可見,對中文進行了UTF-8編碼。

 

在客戶端使用URLDecoder進行解碼:

以下:

    <%

       Assertion assertion = AssertionHolder.getAssertion();

       AttributePrincipal ap =  assertion.getPrincipal();

       String id = ap.getName();

       Map<String,Object> att = ap.getAttributes();

       out.print("<br/>"+id);

       out.print("<br/>"+att);

       String name = URLDecoder.decode(""+att.get("username"), "UTF-8");

       out.println("<br/>"+name);

    %>

 本文由用戶 wangjianme 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!