Liferay 如何根据用户的角色将用户定位到不同的页面

Liferay 如何根据用户的角色将用户定位到不同的页面,liferay,Liferay,我正在使用Liferay,希望在用户登录后显示不同的登录页:如果门户网站的管理员尝试登录,他将登录到页面a,如果客户登录门户网站,他将登录到页面B。 @今天我已经做到了 package com.landing.page.pagetwo; import java.util.ArrayList; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.Htt

我正在使用Liferay,希望在用户登录后显示不同的登录页:如果门户网站的管理员尝试登录,他将登录到页面a,如果客户登录门户网站,他将登录到页面B。 @今天我已经做到了

    package com.landing.page.pagetwo;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.kernel.events.Action;
import com.liferay.portal.kernel.events.ActionException;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.struts.LastPath;
import com.liferay.portal.kernel.util.PrefsPropsUtil;
import com.liferay.portal.kernel.util.PropsKeys;
import com.liferay.portal.kernel.util.StringPool;
import com.liferay.portal.kernel.util.Validator;
import com.liferay.portal.kernel.util.WebKeys;
import com.liferay.portal.model.Group;
import com.liferay.portal.model.User;
import com.liferay.portal.service.GroupLocalServiceUtil;
import com.liferay.portal.util.PortalUtil;

public class LandingPage extends Action {

@Override
public void run(HttpServletRequest httpsreq, HttpServletResponse httpsres)
              throws ActionException {
    try {
        doRun(httpsreq, httpsres);
    }
    catch (Exception e) {
        throw new ActionException(e);
    }
}
protected void doRun(
        HttpServletRequest request, HttpServletResponse response)
        throws Exception {

        long companyId = PortalUtil.getCompanyId(request);

        String path =
            PrefsPropsUtil.getString(
                companyId, PropsKeys.DEFAULT_LANDING_PAGE_PATH);

        if (_log.isInfoEnabled()) {
            _log.info(PropsKeys.DEFAULT_LANDING_PAGE_PATH + StringPool.EQUAL +
                path);
        }

        if (Validator.isNull(path)) {
            path = getCustomLandingPage(request);
        }

        HttpSession session = request.getSession();
        session.setAttribute(WebKeys.LAST_PATH, new LastPath(
            StringPool.BLANK, path));

    }
private String getCustomLandingPage(HttpServletRequest request)
        throws PortalException, SystemException {

        String customLandingPagePath = StringPool.BLANK;


        customLandingPagePath = getSitePath(PortalUtil.getUser(request), false);

        return customLandingPagePath;
    }
    private String getSitePath(User user, boolean includeLanguage)
            throws PortalException, SystemException {

            String sitePath = StringPool.BLANK;
            List<Group> userSites = getSites(user.getUserId());

            String language = StringPool.BLANK;

            if (includeLanguage) {
                language = StringPool.SLASH + user.getLocale().getLanguage();
            }

            if ((userSites != null) && !userSites.isEmpty()) {
                String siteFriendlyURL = userSites.get(0).getFriendlyURL();
                sitePath = language + "/group" + siteFriendlyURL + "/pagetwo";
            }

            return sitePath;
        }
    private List<Group> getSites(long userId)
            throws PortalException, SystemException {

            List<Group> sites = new ArrayList<Group>();

            for (Group group : GroupLocalServiceUtil.getUserGroups(userId)) {
                if (group.isRegularSite() &&
                    !"Guest".equalsIgnoreCase(group.getName())) {
                    sites.add(group);
                    break;
                }
            }
            return sites;
        }

        private static Log _log =
            LogFactoryUtil.getLog(LandingPage.class);
}
现在我可以登陆我的网站的自定义页面了。但是如何限制其他用户从此页面登录,以及如何将他们登录到其他页面。

首先: 在登录之前,所有用户都是来宾。每个经过身份验证的用户都将具有用户角色。因此,您必须检查用户是否是管理员。话虽如此,我会采取以下方法: 例如,为角色创建自定义字段并将其称为landingPage。 创建一个PostLoginHook

package com.liferay.sample.hook;
import com.liferay.portal.kernel.events.Action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class LoginAction extends Action {
    public void run(HttpServletRequest req, HttpServletResponse res) {
        System.out.println("## My custom login action");
    }
}
在run方法中,检查landingPage自定义字段的值,然后相应地设置lastPath属性。比如说:

Map params = new HashMap();  

params.put("p_l_id", new String[] {"PRI.1.1"});

LastPath lastPath = new LastPath("/c", "/portal/layout", params);

session.setAttribute(WebKeys.LAST_PATH, lastPath);
您可能还想看看Liferay本身的DefaultLandingPageAction类:

我建议使用自定义字段,这样您就可以随时更改登录页。另一个优点是,您也可以在其他角色中执行此操作