0

我刚刚使用Liferay完成了一个客户网站的实施。该服务运作良好。改进的机会之一是减少来自被锁定客户的电话数量;我们的限制是 5。这个想法是向将在下次尝试时被锁定的客户发出警告,并建议他们改用“忘记密码”工作流程。

请注意,我们定义了 auth.pipeline.pre=our-class。在处理身份验证时,我可以轻松读取用户记录并找出尝试了多少次失败的登录;我不知道该怎么做会导致Liferay 登录操作处理程序注册一个可以被login.jsp检测到的异常。我怀疑这可能很难,因为我的auth.pipeline.pre=our-class类只能返回 3 个值,而且它们都没有所需的语义。

提前感谢您的帮助。

4

1 回答 1

0

这可以通过挂钩 login.jsp 并覆盖 liferay-ui:error 标记中的 AuthException 消息来完成,如下所示。

Boolean isMaxFailedLoginAttempt = false;
PortletRequest portletRequest = (PortletRequest)request.getAttribute(JavaConstants.JAVAX_PORTLET_REQUEST);
if(SessionErrors.contains(portletRequest, AuthException.class.getName())) { 
    User u = UserLocalServiceUtil.getUserByEmailAddress(company.getCompanyId(), login); 
    if(u != null) { 
        if(u.getFailedLoginAttempts() == 5) {
        isMaxFailedLoginAttempt = true;
    } 
    }
}

if(isMaxFailedLoginAttempt) {
%>  
    <liferay-ui:error exception="<%= AuthException.class %>" message="The username or   password you entered is incorrect; another incorrect login will temporarily lock your account. Please use forgot password link to reset the password." />
<%
   } else {
%>  
   <liferay-ui:error exception="<%= AuthException.class %>" message="The username or password you entered is incorrect. Please try again." />
<%      
   }
%>

`

于 2013-02-19T06:58:39.917 回答