我想在自定义portlet中检查密码。
我在UserLocalServiceImpl中看到过这个:
PasswordPolicy passwordPolicy = passwordPolicyLocalService.getDefaultPasswordPolicy(companyId);
PwdToolkitUtil.validate(companyId, 0, password1, password2, passwordPolicy);
我试图在自定义portlet中使用它...我可以instiantate passwordPolicy,但我无法访问使用PwdToolkitUtil ....错误是“导入com.liferay.portal.secutiry.pwd.PwdToolkitUtil。不能解决”。
问题出在哪儿?是否可以使用自定义portlet检查门户策略的密码?
你可以用作:
PasswordTrackerLocalServiceUtil.isValidPassword(long userId, String newClearTextPwd)
此API将检查Liferay PasswordPolicies
PwdToolkitUtil
不在API中。因此,您可以查看其源代码并自己实现等效功能。课堂上没有很多代码,因此复制它可能不会太糟糕。
看看下面的类/方法。需要userId和密码(不加密,只是纯文本)。
com.liferay.portal.service.PasswordTrackerLocalServiceUtil
public boolean isSameAsCurrentPassword(long userId, String newClearTextPwd)
这对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);
}
}