In this example
we will see how to change/update liferay user account password.
In this
approach we will match user account database password which is stored is
database with user input current password which user will provide user as a
currentPassword using liferay API. PasswordTrackerLocalServiceUtil
STEPS:
Step1: Create one liferay mvc project name: Passwordchanger of portlet plugin type. Now create one portlet inside that project .In this example portlet
class/controller name: ChangePassword.java
Step 2: Add below code in portlet view.jsp, path:
docroot/html/changepassword/view.jsp
<%@ include file="init.jsp" %>
<portlet:defineObjects />
<%
PortletURL updateUserPasswordURL =
renderResponse.createActionURL();
updateUserPasswordURL.setParameter(actionRequest.ACTION_NAME,
"changingMyPassword");
%>
<aui:form method="post"
action="<%=updateUserPasswordURL%>">
<liferay-ui:error key="currentPassNotMatched-key"
message="Current Password is Not Matched."></liferay-ui:error>
<liferay-ui:error key="currentPassMatched-key"
message="New Password should be different from current
password."></liferay-ui:error>
<aui:fieldset cssClass="lfr-portrait-editor">
<aui:input autoFocus="<%= true %>"
type="password" label="Current
Password" value=""
name="currentPassword" autocomplete="off">
<aui:validator name="required"
/>
</aui:input>
<aui:input label="New
Password" name="newPassword"
size="30" type="password"
value="">
<aui:validator name="required"
/>
</aui:input>
<aui:input label="Enter
Again" name="confirmPassword"
size="30" type="password"
value="">
<aui:validator name="required"
/>
<aui:validator name="equalTo">
'#<portlet:namespace />newPassword'
</aui:validator>
</aui:input>
<aui:button-row><aui:button type="submit"/></aui:button-row>
</aui:fieldset>
</aui:form>
Step 5: Create one new jsp name:init.jsp page inside
docroot/html/changepassword/init.jsp
And add below code.
<%@page import="javax.portlet.PortletURL"%>
<%@page import="com.liferay.portal.kernel.util.WebKeys"%>
<%@page import="com.liferay.portal.theme.ThemeDisplay"%>
<%@ taglib uri="http://liferay.com/tld/aui" prefix="aui"%>
<%@ taglib uri="http://liferay.com/tld/ui" prefix="liferay-ui" %>
<%@page import="com.liferay.portal.service.UserLocalServiceUtil"%>
<%@page import="com.liferay.portal.model.User"%>
<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>
Step 6: Add below code in portlet controller, in this example
controller name: ChangePassword.java
package com.test;
import java.io.IOException;
import
javax.portlet.ActionRequest;
import
javax.portlet.ActionResponse;
import
javax.portlet.PortletException;
import
com.liferay.portal.kernel.exception.PortalException;
import
com.liferay.portal.kernel.exception.SystemException;
import
com.liferay.portal.kernel.servlet.SessionErrors;
import
com.liferay.portal.kernel.servlet.SessionMessages;
import
com.liferay.portal.kernel.util.WebKeys;
import
com.liferay.portal.service.PasswordTrackerLocalServiceUtil;
import
com.liferay.portal.service.UserLocalServiceUtil;
import
com.liferay.portal.theme.ThemeDisplay;
import
com.liferay.util.bridges.mvc.MVCPortlet;
/**
* Portlet implementation class
ChangePassword
*/
public class ChangePassword extends MVCPortlet {
public void
changingMyPassword(ActionRequest actionRequest,
ActionResponse
actionResponse) throws IOException,
PortletException {
ThemeDisplay
themeDisplay = (ThemeDisplay)actionRequest.getAttribute(WebKeys.THEME_DISPLAY);
String
userInputcurrentPassword = (String) actionRequest.getParameter("currentPassword").trim();
String
newPass = (String) actionRequest.getParameter("newPassword").trim();
String
confirmPass = (String) actionRequest.getParameter("confirmPassword").trim();
try {
boolean userInputcurrentPassDatapassMatched = PasswordTrackerLocalServiceUtil.isSameAsCurrentPassword(themeDisplay.getUserId(), userInputcurrentPassword);
if(!userInputcurrentPassDatapassMatched){
SessionErrors.add(actionRequest, "currentPassNotMatched-key", "Sorry,
Current Password Not Matched");
actionResponse.setRenderParameter("jspPage", "/html/changepassword/view.jsp");
}
else if(userInputcurrentPassword.equals(newPass) || userInputcurrentPassword.equals(confirmPass) ){
SessionErrors.add(actionRequest, "currentPassMatched-key", "Sorry, New
Password should be different from current password");
actionResponse.setRenderParameter("jspPage", "/html/changepassword/view.jsp");
}
else if (userInputcurrentPassDatapassMatched && newPass.equals(confirmPass)){
UserLocalServiceUtil.updatePassword(themeDisplay.getUserId(), newPass,confirmPass, false);
SessionMessages.add(actionRequest, "request_processed", "User Account
Password updated successfully.");
actionResponse.setRenderParameter("jspPage", "/html/changepassword/view.jsp");
}
}
catch (PortalException e) {
// TODO Auto-generated
catch block
e.printStackTrace();
}
catch (SystemException e) {
// TODO Auto-generated
catch block
e.printStackTrace();
}
}
}
After deploying portlet.
OUTPUT:
Login using your account credential,
Example :
Password: test
0 comments:
Post a Comment