`
starbhhc
  • 浏览: 632739 次
  • 性别: Icon_minigender_2
  • 来自: 深圳
社区版块
存档分类
最新评论

第二节:cas处理中文乱码

    博客分类:
  • java
 
阅读更多

cas service配置参考第一节。

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>

 

<!-- start   登录成功后获取用户的更多信息 -->

<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}">

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

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

 </cas:${fn:escapeXml(attr.key)}>

 

//或者:

 

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

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

 

 

 

</cas:${fn:escapeXml(attr.key)}>

                </c:forEach>

            </cas:attributes>

        </c:if>

 <!-- end -->

 <!-- 

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

  -->

 

                    

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

经过编码以后的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进行解码:

以下:

<%@page  import="java.net.*" %>

    <%

       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);

    %>

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics