以下は、私が使用している 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" %>
...
<c:forEach var="attr" items="${auth.principal.attributes}" >
<c:forEach var="attrVal" items="${attr.value}">
<attribute name="${fn:escapeXml(attr.key)}" value="${fn:escapeXml(attrVal)}"/>
</c:forEach>
</c:forEach>
...
各属性は、文字列または文字列のコレクションのいずれかです。このコードはほとんどの場合問題なく動作しますが、文字列値の 1 つにカンマが含まれていると、2 つの属性に分割されます。
私が期待しているのは、次のような出力です。
...
<attribute name="FirstName" value="Adam"/>
<attribute name="LastName" value="Franco"/>
<attribute name="DisplayName" value="Franco, Adam S."/>
<attribute name="Status" value="Staff"/>
<attribute name="MemberOf" value="CN=All Staff,OU=Groups,DC=example,DC=edu"/>
<attribute name="MemberOf" value="CN=Admins,OU=Groups,DC=example,DC=edu"/>
...
代わりに得られるものは次のとおりです。
...
<attribute name="FirstName" value="Adam"/>
<attribute name="LastName" value="Franco"/>
<attribute name="DisplayName" value="Franco"/>
<attribute name="DisplayName" value=" Adam S."/>
<attribute name="Status" value="Staff"/>
<attribute name="MemberOf" value="CN=All Staff,OU=Groups,DC=example,DC=edu"/>
<attribute name="MemberOf" value="CN=Admins,OU=Groups,DC=example,DC=edu"/>
...
「DisplayName」属性が、FirstName や LastName と同じように単純な文字列としてバックエンドから送信されていることを確認しました。唯一の違いは、たまたまコンマが含まれていることです。principle.attributes
以下は、JSP に返される直前
のマップのスクリーンショットです。
文字列と JSP 内の文字列のコレクションを区別したり、forEach
呼び出しで文字列がカンマで分割されないようにするにはどうすればよいですか?