我想在自定义portlet中检查密码。
我在UserLocalServiceImpl中看到了这个:
PasswordPolicy passwordPolicy = passwordPolicyLocalService.getDefaultPasswordPolicy(companyId);
PwdToolkitUtil.validate(companyId, 0, password1, password2, passwordPolicy);
我试图在自定义portlet中使用它...我可以使用passwordPolicy,但我无法访问使用PwdToolkitUtil ....错误是“导入com.liferay.portal.secutiry.pwd.PwdToolkitUtil无法解决“。
问题出在哪里?是否有替代方法可以从自定义portlet中检查门户策略的密码?
答案 0 :(得分:1)
你可以用作:
PasswordTrackerLocalServiceUtil.isValidPassword(long userId, String newClearTextPwd)
此API将检查Liferay PasswordPolicies
答案 1 :(得分:0)
PwdToolkitUtil
不在API中。因此,您可以查看其源代码并自己实现等效功能。在课堂上没有很多代码,因此重复它可能不会太糟糕。
答案 2 :(得分:0)
查看以下类/方法。需要userId和密码(不加密,只是纯文本)。
com.liferay.portal.service.PasswordTrackerLocalServiceUtil
public boolean isSameAsCurrentPassword(long userId, String newClearTextPwd)
答案 3 :(得分:0)
这在Liferay 7.1上对我有效
@Override
protected void doProcessAction(ActionRequest actionRequest,
ActionResponse actionResponse) throws Exception {
String password1 = ParamUtil.getString(actionRequest, "password1", "");
String password2 = ParamUtil.getString(actionRequest, "password2", "");
try {
ThemeDisplay themeDisplay = (ThemeDisplay) actionRequest.getAttribute(WebKeys.THEME_DISPLAY);
long userId = UserLocalServiceUtil.authenticateForBasic(themeDisplay.getCompanyId(), authType, login, current);
PasswordPolicy passwordPolicy = PasswordPolicyLocalServiceUtil.getPasswordPolicyByUserId(userId); //.getDefaultPasswordPolicy(companyId);
ClassLoader portalClassLoader = PortalClassLoaderUtil.getClassLoader();
Class<?> pwdToolkitUtilClass = portalClassLoader.loadClass("com.liferay.portal.security.pwd.PwdToolkitUtil");
MethodKey methodKey = new MethodKey(pwdToolkitUtilClass, "validate", long.class, long.class, String.class, String.class, PasswordPolicy.class);
PortalClassInvoker.invoke(methodKey, themeDisplay.getCompanyId(), userId, password1, password2, passwordPolicy);
} catch (UserPasswordException e) {
SessionErrors.add(actionRequest, e.getClass(), e);
}
}