liferay 7中自定义登录方法

问题描述 投票:0回答:1

我最近开始学习liferay(7.1.2 ga3)。我的要求是更改登录代码(即编写自己的登录代码)不是login.jsp中的外观

我通过以下步骤创建了一个钩子文件(在liferay开发工作室中)新建-> Liferay模块项目->项目名称为CustomLogin->构建类型为Maven->项目模板名称为war-hook->然后完成。

创建名为 CustomLogin 的文件夹后,在 src -> main -> java -> CustomLogin -> 中,我可以看到两个文件 CustomLoginLoginPostAction.java 和 CustomLoginStartupAction.java

在 CustomLoginStartupAction.java 中


package CustomLogin;

import com.liferay.portal.kernel.events.ActionException;
import com.liferay.portal.kernel.events.SimpleAction;

public class CustomLoginStartupAction extends SimpleAction {

    @Override
    public void run(String[] lifecycleEventIds) throws ActionException {
        for (String eventId : lifecycleEventIds) {
            System.out.println("Startup event ID " + eventId);
        }
    }

}

在 CustomLoginLoginPostAction.java 中


package CustomLogin;

import com.liferay.portal.kernel.events.Action;
import com.liferay.portal.kernel.model.User;
import com.liferay.portal.kernel.service.UserLocalServiceUtil;
import com.liferay.portal.kernel.util.PortalUtil;

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

public class CustomLoginLoginPostAction extends Action
{
    @Override
    public void run(HttpServletRequest request, HttpServletResponse response)
    {
        long userId = PortalUtil.getUserId(request);

        User user = UserLocalServiceUtil.fetchUser(userId);

        System.out.println(user.getFirstName() + " has logged in.");
    }
}

但是我不知道之后该怎么办。请帮忙。或者给出一些示例代码。

liferay liferay-7
1个回答
4
投票

强烈推荐:

  1. 当您开始学习 Liferay 时,请从当前版本开始,而不是 2019 年 1 月的版本(2018 年的原始 7.1.x 版本)
  2. 从 OSGi 插件开始 - 它们的部署速度比 WAR 档案快得多,并且运行时需要的内存少得多
  3. 考虑一下需求:您使用的平台可以让您选择忽略所有用户管理问题,而您要做的第一件事就是收回对这个微妙问题的控制。相反:利用这个平台来发挥你的优势。如果您需要针对另一个用户数据库进行身份验证,请考虑使用 LDAP 或 SSO:这是配置,而不是代码 - 因此您无需维护

话虽如此,您发布的代码添加到登录过程中。例如。 LoginPostAction 在 Liferay 自己的登录代码已经执行之后执行。当您知道您正在处理的用户(并且他们已正确进行身份验证)时,这使您能够拦截登录并施加自定义规则。同样,还有一个类似的 LoginPreAction,它允许您在应用用户登录之前拦截登录过程。 (StartupAction 是错误的路径 - 与登录过程无关 - 不要为此目的遵循该路径)

您通常在这些操作中执行的操作是根据不可配置的条件拒绝访问(例如,用户可以从该 IP 登录吗?此时?)或初始化一些附加环境(例如,触发某些后端操作,初始化会议)。为此,您可以决定在登录成功之前或之后执行此操作。

如果 - 与我的建议相反 - 您决定仍然想要自定义登录过程:

7.0 的代码

应该仍然适用于 7.1(甚至可能适用于当前版本 7.4)。它涉及编写一个自定义登录 portlet,并且在检索 HttpServletRequest 之后,相关代码位于此类中(我从链接的示例中省略了表示层) @Component( property = { "javax.portlet.name=MyLoginPortlet", "mvc.command.name=/login/login" }, service = MVCActionCommand.class ) public class MyLoginMVCActionCommand extends BaseMVCActionCommand { @Override protected void doProcessAction(ActionRequest actionRequest, ActionResponse actionResponse) throws Exception { ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute( WebKeys.THEME_DISPLAY); HttpServletRequest request = PortalUtil.getOriginalServletRequest( PortalUtil.getHttpServletRequest(actionRequest)); HttpServletResponse response = PortalUtil.getHttpServletResponse( actionResponse); String login = ParamUtil.getString(actionRequest, "login"); String password = actionRequest.getParameter("password"); boolean rememberMe = ParamUtil.getBoolean(actionRequest, "rememberMe"); String authType = CompanyConstants.AUTH_TYPE_EA; AuthenticatedSessionManagerUtil.login( request, response, login, password, rememberMe, authType); actionResponse.sendRedirect(themeDisplay.getPathMain()); } }

但实际上:利用时间来增加业务价值并解决业务问题。很高兴基础设施层已经得到解决。

© www.soinside.com 2019 - 2024. All rights reserved.