这是我正在使用的 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>
...
每个属性可以是字符串或字符串的集合。这段代码大部分时间都可以正常工作,但如果其中一个字符串值包含逗号,那么它会被分成两个属性。
我期待的是如下输出:
...
<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
调用以逗号分隔字符串?