【问题标题】:Displaying jpegPhoto attribute from LDAP in Websphere Portal在 Websphere Portal 中显示来自 LDAP 的 jpegPhoto 属性
【发布时间】:2023-10-14 20:56:01
【问题描述】:

我有一个要求,我需要在使用 PUMA API 从 LDAP 搜索后显示用户的详细信息。

我在显示用户的 jpegPhoto 时遇到了麻烦。

这是我正在做的事情: 首先,我使用以下方式查询用户: PumaLocator.findUsersByAttribute(uid, user);

之后我们得到一个用户列表对象。 对于每个用户,我们以 Map 的形式获取所有属性。

我在检索 jpegPhoto 时得到以下值:

map.get("jpegPhoto") --> [B@7a2f8a54

Puma API 似乎返回了一个二进制字符串。有谁知道如何在 portlet 中显示这个?

任何帮助将不胜感激。谢谢你

【问题讨论】:

  • 这是调用byte[].toString()的结果。

标签: ldap websphere-portal


【解决方案1】:

我认为这更有可能是byte[] 数组而不是字符串。

您可能可以将此二进制文件进行 base64 编码为编码字符串,并在 HTML 图像标签中使用它。

byte[] photoBytes = (byte[]) map.get("jpegPhoto");
String encodedPhoto = org.apache.commons.codec.binary.Base64.encodeBase64(photoBytes);

然后,也许在 JSP 中(示例假定 JSTL 变量在名为 encodedPhoto 的范围内):

<img src="data:image/jpeg;base64,${encodedPhoto}"/>

【讨论】:

    【解决方案2】:

    这样做的一种方法是通过门户服务 servlet 访问图像,而不是使用您自己的 servlet:/wps/um/secure/users/profiles/[oid]/jpegPhoto,其中您将 [oid] 替换为用户的 ObjectID。可以使用IdentificationMgr.getIdentification().serialize(user.getObjectID())获取这个ID字符串

    您可以访问的当前用户的照片:/wps/um/secure/currentuser/profile/jpegPhoto

    【讨论】:

      【解决方案3】:

      Portal 以字节数组的形式为您提供数据。它永远不会给你作为 URL。 您可以编写一个 servlet,它将这个字节数组写入输出流。 将该 servlet URL 用作标记的 src。它将开始在浏览器上呈现。

      仅供参考,您不能将字节数组打印到浏览器并期望它被视为图像。 图像或任何其他文件必须作为资源而不是内容。

      【讨论】: