Sunday, January 31, 2016

Change Liferay User Account Password Example 2

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


Change Liferay User Account Password Example 1

In this example we will see how to change/update liferay user account password.

STEPS:
Step 1: Add below entry in portal-ext.properties , path inside “liferay-portal-6.2.0-ce-ga1” or
liferay-portal-6.2.0-ce-ga1\tomcat-7.0.42\webapps\ROOT\WEB-INF\classes
session.shared.attributes.excludes = USER_PASSWORD
session.store.password=true

Step2: 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 3: Add below entry in liferay-portlet.xml  of created portlet after <icon></icon> tag
<private-session-attributes>false</private-session-attributes>

Step 4: 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 exception="<%= UserPasswordException.class %>" message="that-password-has-already-been-used-please-enter-in-a-different-password" />
  <liferay-ui:error key="error-key" message="Current Password is invalid."></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="com.liferay.portal.UserPasswordException"%>
<%@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.util.bridges.mvc.MVCPortlet;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import com.liferay.portal.UserPasswordException;
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.UserLocalServiceUtil;
import com.liferay.portal.theme.ThemeDisplay;
import com.liferay.portal.util.PortalUtil;
import com.liferay.util.EncryptorException;

/**
 * Portlet implementation class ChangePassword
 */
public class ChangePassword extends MVCPortlet {

       public void changingMyPassword(ActionRequest actionRequest,ActionResponse actionResponse) throws PortalException, SystemException, EncryptorException, IOException, PortletException
       {
                     try {
                                  ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(WebKeys.THEME_DISPLAY);
                                  HttpServletRequest httprequest = PortalUtil.getHttpServletRequest(actionRequest);
                                  HttpSession httpsession = httprequest.getSession();
                                 
                                  //Get the user's current password from session
                                  String userAccountdatabasePassword = (String)httpsession.getAttribute(WebKeys.USER_PASSWORD);
                                  String userInputcurrentPassword = (String) actionRequest.getParameter("currentPassword").trim();
                          
                                  String newPass = (String) actionRequest.getParameter("newPassword").trim();
                                  String confirmPass = (String) actionRequest.getParameter("confirmPassword").trim();
                                 
                                  if (userAccountdatabasePassword.equals(userInputcurrentPassword) && newPass.equals(confirmPass)) {
                                                UserLocalServiceUtil.updatePassword(themeDisplay.getUserId(), newPass,confirmPass, false);
                                                //Set the entered new password into session after changing the password
                                                httpsession.setAttribute(WebKeys.USER_PASSWORD, newPass);
                                                SessionMessages.add(actionRequest, "request_processed", "User Account Password updated successfully.");
                                                actionResponse.setRenderParameter("jspPage", "/html/changepassword/view.jsp");
                                  } else {
                                          SessionErrors.add(actionRequest, "error-key", "Sorry, Something wrong.");
                                          actionResponse.setRenderParameter("jspPage", "/html/changepassword/view.jsp");
                                  }
                     } catch (UserPasswordException e) {
                                     SessionErrors.add(actionRequest, UserPasswordException.class.getName(), e);
                                     actionResponse.setRenderParameter("jspPage", "/html/changepassword/view.jsp");
                     }
       }
}

After deploying portlet.

OUTPUT:

Login using your account credential,
Example :

Password: test

Liferay Cache Using MultiVMPoolUtil

Liferay Version: Liferay 6.2

In this post we will see how to use liferay cache.
In this example we will put values in cache inside render method and will get that cache value in jsp.
We can put cache in other places also.

STEPS:
Step1: Create one liferay mvc project name: Caching of portlet plugin type.  Now create one portlet  inside that project .In this example portlet class/controller name: Cache.java
Step 2: Add below code in portlet view.jsp, path: docroot/html/caching/view.jsp
<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>
<%@page import="com.liferay.portal.kernel.util.Validator"%>
<%@page import="com.liferay.portal.model.User"%>
<%@page import="java.util.List"%>
<%@page import="com.liferay.portal.kernel.cache.MultiVMPoolUtil"%>
<portlet:defineObjects />

<%
String name = (String)MultiVMPoolUtil.getCache("my-Cache").get("Name");
List<User> users =(List<User>)MultiVMPoolUtil.getCache("myList-Cache").get("listValue");
%>

Name : <%=name%>
<%
if(Validator.isNull(users)){
       out.println("cache is cleared...");
} else{
       for(User userInfo: users){
              %>
              <p style="color:green;"><%=userInfo.getEmailAddress()%></p><br/>
        <%
        }
}
%>


Step 3: Add below code in portlet controller, in this example controller name: Cache.java
package com.test;

import java.io.IOException;
import java.io.Serializable;
import java.util.List;

import javax.portlet.PortletException;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;

import com.liferay.portal.kernel.cache.MultiVMPoolUtil;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.model.User;
import com.liferay.portal.service.UserLocalServiceUtil;
import com.liferay.util.bridges.mvc.MVCPortlet;

/**
 * Portlet implementation class Cache
 */
public class Cache extends MVCPortlet {

        @Override
              public void render(RenderRequest request, RenderResponse response)
                           throws PortletException, IOException {
                    
                  String name = "Azharuddin";
                     List<User>  userList = null;
                      try {
                            userList = UserLocalServiceUtil.getUsers(-1, UserLocalServiceUtil.getUsersCount());
                     } catch (SystemException e) {
                           // TODO Auto-generated catch block
                           e.printStackTrace();
                     }
                      MultiVMPoolUtil.getCache("myList-Cache").put("listValue", (Serializable)userList);
                      MultiVMPoolUtil.getCache("my-Cache").put("Name",name);
                      // TODO Auto-generated method stub
                     super.render(request, response);
              }
      


}


After deploying portlet.


OUTPUT: