[开发] 关于liferay portlet开发的userid(用户)问题

liushl2001 2007-05-14
在portlet中,
记录访问者的信息是经常遇到的,
请问在liferay portlet中如何得到登录的用户信息呢?

由于是刚开始使用liferay,

我的portlet是和例子一样采用的独立web应用方式,

查看liferay的portlet源代码所使用的方法,要移植过来感觉关联太多,

请问是不是liferay的portlet中有直接取得登录信息的方法呢?

先谢谢你的回复!
LiuYiJie2007 2007-05-15
<%@ taglib uri="http://java.sun.com/portlet" prefix="portlet" %>

<%@ taglib uri="http://liferay.com/tld/security" prefix="liferay-security" %>
<%@ taglib uri="http://liferay.com/tld/theme" prefix="liferay-theme" %>
<%@ taglib uri="http://liferay.com/tld/ui" prefix="liferay-ui" %>
<%@ page import="com.liferay.portal.theme.ThemeDisplay" %>
<portlet:defineObjects />
<liferay-theme:defineObjects />
<liferay-theme:meta-tags />

<%
System.out.println("*********user id*********"
+themeDisplay.getUserId());
%>
这样可以得到 登陆用户ID
冬雪风铃 2007-05-15
还可以通过获取session来实现,登陆人的id的session的字符串是"j_username"。
liushl2001 2007-05-15
谢谢回复,我的用法和冬雪风铃讲得一样

我在Struts Action中采如下的代码测试如下:

HttpSession ses = req.getSession();

String user=(String) ses.getAttribute("j_username");

user=(String) ses.getAttribute("j_remoteuser");

但是,并没有得到数据,user返回为null;

查看liferay源代码,发现在liferay处理登录的时候的确是作了如下的语句:(LoginAction.java)
ses.setAttribute("j_username", userId);
ses.setAttribute("j_password", user.getPassword());
ses.setAttribute("j_remoteuser", userId);

但是我还是在action中不能取得,这是不是我只得到了portlet的session呢?所以里面j_remoteuser等这些属性没有?


liushl2001 2007-05-15
由LiuYiJie2007的回复,
查看了com.liferay.taglib.theme.DefineObjectsTag的源代码
发现了以下代码可以直接取得用户信息
ThemeDisplay themeDisplay =(ThemeDisplay)req.getAttribute("THEME_DISPLAY");
themeDisplay.getUser()。

但是,由于现在我的工程是与liferay源代码非一个工程,我是将liferay源代码编译运行,所以我的工程就不能直接引用ThemeDisplay ,
我发现移植过来关联太多,
今天还是没有能狗解决问题。。
liushl2001 2007-05-15
接4楼,
今天通过对liferay源代码跟踪,确定两个session不是同一个session,

导致j_username等不能取出

但是,发现liferay在进行环境初始化时,是以USER_ID的属性名进行的保存,所以,以下这简单的两句就是答案了:)
HttpSession ses = req.getSession();

String user=(String) ses.getAttribute("USER_ID");

再次感谢LiuYiJie2007与冬雪风铃的回复。
qsjustin 2007-05-25
request.getRemoteUser()

这样不就可以了?
ahuig 2007-07-13

ThemeDisplay themeDisplay = (ThemeDisplay) request.getAttribute(WebKeys.THEME_DISPLAY);
User user = themeDisplay.getUser();

应该可以得到吧,不知道你是怎么使用的?我们当时直接用的liferay打包好的jar

PS: ServicePreAction里会设置ThemeDisplay 的相关属性,下面是取USER的部分

// User

User user = null;

try {
user = PortalUtil.getUser(req);
}
catch (NoSuchUserException nsue) {
return;
}

// Is the user signed in?

boolean signedIn = false;

if (user == null) {
user = company.getDefaultUser();
}
else {
signedIn = true;
}
wildwind 2007-07-16
楼上的正解!themeDisplay!
Display88 2007-09-12
request.getRemoteUser() 取出来的就是userId啊
Global site tag (gtag.js) - Google Analytics