2

我在 Liferay 中实现了一个单独的更改密码模块,特别是扩展了登录 portlet,使其在登录时具有更改密码。

我尝试调用 struts 操作 enterprise_admin/edit_user 但它不起作用但我通过获取该用户的密码策略并检查该类中的 minUpperCase 等实现了我自己的密码检查器,但有没有一种方法可以检查语法没有遍历密码并计算 minUpperCase 等?

Liferay 是否有特定的方法来检查密码是否适用于密码策略?

4

3 回答 3

1

你可以试试这个。这就是他们在 UserLocalService 中所做的

PasswordPolicy passwordPolicy = passwordPolicyLocalService.getDefaultPasswordPolicy(companyId);
PwdToolkitUtil.validate(companyId, 0, password1, password2, passwordPolicy);
于 2013-09-11T14:54:06.323 回答
1

如果您没有看到 PwdToolkitUtil 您可以尝试这种方式:

Object[] arguments= {user.getCompanyId(), user.getUserId(), password, password, passwordPolicy};
MethodKey methodKey = new MethodKey("com.liferay.portal.security.pwd.PwdToolkitUtil", "validate", long.class, long.class, String.class , String.class, PasswordPolicy.class);
PortalClassInvoker.invoke(false, methodKey, arguments);
于 2013-10-02T08:30:00.160 回答
0

如果您只是因为“登录时更改密码”功能而自定义登录,您也可以只使用门户的默认行为UserLocalServiceUtil.updatePassword,而不是第四个参数:

public static User updatePassword(long userId,
                                  String password1,
                                  String password2,
                                  boolean passwordReset,
                                  boolean silentUpdate)
                       throws PortalException,
                              SystemException

Updates the user's password, optionally with tracking and validation of the change.

Parameters:
    userId - the primary key of the user
    password1 - the user's new password
    password2 - the user's new password confirmation
    passwordReset - whether the user should be asked to reset their password the next time they login
    silentUpdate - whether the password should be updated without being tracked, or validated. Primarily used for password imports.  
Returns:
    the user  
Throws:
    PortalException - if a user with the primary key could not be found 
    SystemException - if a system exception occurred
于 2013-10-02T08:59:52.287 回答