我最近开始学习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.");
}
}
但是我不知道之后该怎么办。请帮忙。或者给出一些示例代码。
强烈推荐:
话虽如此,您发布的代码添加到登录过程中。例如。 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());
}
}
但实际上:利用时间来增加业务价值并解决业务问题。很高兴基础设施层已经得到解决。