我试图在我的portlet中获取用户信息(在JBoss GateIn中部署的JSR 286 portlet),如
Map userInfo = (Map) request.getAttribute(PortletRequest.USER_INFO);
但我什么都没得到。我的portlet.xml有以下参数:
<user-attribute>
<description>User Name</description>
<name>user.name</name>
</user-attribute>
<user-attribute>
<description>User Id</description>
<name>user.id</name>
</user-attribute>
GateIn提供PortalRequestContext,它提供了getRemoteUser()方法来登录用户的id。然后,OrganizationService可以使用此id来获取User,但这可能是所有GateIn特定的而不是JSR286标准。 JSR 286声明可以从PortletRequest.USER_INFO获取用户相关属性,如上所述。请指导。
提前致谢!
Ps:JBoss社区上的类似帖子http://community.jboss.org/message/425683#425683
答案 0 :(得分:0)
你的名字ID是不同的,根据规范,它就像是,
<user-attribute>
<description>User Given Name</description>
<name>user.name.given</name>
</user-attribute>
<user-attribute>
<description>User Last Name</description>
<name>user.name.family</name>
</user-attribute>
<user-attribute>
<description>User eMail</description>
<name>user.business-info.online.email</name>
</user-attribute>
下面是更多(只是其中的一部分)..你可以从jsr286 spec获得完整列表
user.gender
user.employer
user.department
user.jobtitle
user.name.prefix
user.name.given
user.name.family
user.name.middle
user.name.suffix
user.name.nickName
user.login.id
user.home-info.postal.name
user.home-info.postal.street
user.home-info.postal.city
user.home-info.postal.stateprov
user.home-info.postal.postalcode
user.home-info.postal.country
user.home-info.postal.organization
user.home-info.telecom.telephone.intcode
user.home-info.telecom.telephone.loccode
user.home-info.telecom.telephone.number
user.home-info.telecom.telephone.ext
user.home-info.telecom.telephone.comment
user.home-info.telecom.fax.intcode
user.home-info.telecom.fax.loccode
user.home-info.telecom.fax.number
答案 1 :(得分:-1)
SPList userInformationList = web.SiteUserInfoList;
SPUser user = web.EnsureUser(web.CurrentUser.Name);
// The actual User Information is within this SPListItem
SPListItem userItem = userInformationList.Items.GetItemById(user.ID);
if (userItem["EMail"] != null)
email = userItem["EMail"].ToString();