Objective:
 Use liferay Captcha
in Plugin portlet.
Environment:
Liferay 6.2 +Tomcat 7.x+MySQL 5.1
Note:
The code will work for any portal version.
Download Liferay Captcha  portlet
from following location
You can find source and war file 
Portlet
Screen:
Procedure for deploy
portlet:
You can use war file and directly place in your portal deploy folder and
test or you can also use source to deploy portlet.
Once portlet is deployed successfully you can see the portlet in sample
category name as Liferay Captcha Action
Some time we need captcha to submit forms in liferay
portlet development. Liferay already have captcha generated library from which
we can generate captcha and verify the captcha.
Liferay have inbuilt tag library to display captcha
in JSP page. And liferay captcha tag needs URL as parameter form that it will get
captcha image.
Liferay have one of the java class called CaptchaUtil
so that we can generate image and we can verify the captcha image.
The following are the two methods which we use in
the portlet
serveImage
method to generate captcha Image
| 
try { 
CaptchaUtil.serveImage(resourceRequest,
  resourceResponse); 
} 
catch
  (Exception e) { 
_log.error(e); 
} | 
Check
method to verify the image
| 
try{ 
CaptchaUtil.check(actionRequest); 
}catch(Exception
  e){ 
if
  (e instanceof CaptchaTextException || e instanceof
  CaptchaMaxChallengesException ){ 
SessionErrors.add(actionRequest,
  e.getClass(), e); 
}else{ 
System.out.println("Captcha
  verification success::"); 
} 
} | 
The following is complete code example
The
following is example code in JSP page
| 
<%@ taglib
  uri="http://java.sun.com/portlet_2_0" prefix="portlet" %> 
<%@ taglib
  uri="http://liferay.com/tld/aui" prefix="aui" %> 
<%@ taglib
  uri="http://liferay.com/tld/portlet" prefix="liferay-portlet" %> 
<%@ taglib
  uri="http://liferay.com/tld/theme" prefix="liferay-theme" %> 
<%@ taglib
  uri="http://liferay.com/tld/ui" prefix="liferay-ui" %> 
<%@ taglib
  uri="http://liferay.com/tld/util" prefix="liferay-util" %> 
<liferay-theme:defineObjects /> 
<portlet:defineObjects /> 
<%@page import="com.liferay.portal.kernel.captcha. 
CaptchaTextException"%> 
<%@page import="com.liferay.portal.kernel.captcha. 
CaptchaMaxChallengesException"%> 
<%@ include
  file="init.jsp" %> 
<liferay-ui:error exception="<%=
  CaptchaTextException.class %>" message="text-verification-failed"
  /> 
<liferay-ui:error exception="<%=
  CaptchaMaxChallengesException.class %>" message="maximum-number-of-captcha-attempts-exceeded"
  /> 
<portlet:actionURL  var="testCaptchaActionURL"
  name="testCaptcha"> 
</portlet:actionURL> 
<aui:form action="<%=
  testCaptchaActionURL %>" method="post"
  name="fm"> 
<aui:input name="firstName"
  value=""/> 
<aui:input  name="lastName"
  value=""/> 
<portlet:resourceURL var="captchaURL"> 
</portlet:resourceURL> 
<liferay-ui:captcha url="<%=captchaURL%>"
  /> 
<aui:button-row> 
<aui:button type="submit"
  /> 
</aui:button-row> 
</aui:form> | 
The following is example code in Action Class to Generate and Verify the Captcha image
| 
package
  com.meera.liferay.captch; 
import
  java.io.IOException; 
import
  javax.portlet.ActionRequest; 
import
  javax.portlet.ActionResponse; 
import
  javax.portlet.PortletException; 
import
  javax.portlet.ResourceRequest; 
import
  javax.portlet.ResourceResponse; 
import
  com.liferay.portal.kernel.captcha.CaptchaMaxChallengesException; 
import
  com.liferay.portal.kernel.captcha.CaptchaTextException; 
import
  com.liferay.portal.kernel.captcha.CaptchaUtil; 
import com.liferay.portal.kernel.servlet.SessionErrors; 
import
  com.liferay.portal.kernel.util.ParamUtil; 
import
  com.liferay.util.bridges.mvc.MVCPortlet; 
public class
  LiferayCaptchaAction extends MVCPortlet { 
      public void
  testCaptcha(ActionRequest actionRequest, ActionResponse actionResponse)throws IOException,
  PortletException { 
      String firstName=ParamUtil.getString(actionRequest,"firstName"); 
      String lastName=ParamUtil.getString(actionRequest,"lastName"); 
      System.out.println("firstName::"+firstName); 
      System.out.println("lastName::"+lastName); 
      try{ 
      CaptchaUtil.check(actionRequest); 
      }catch(Exception e){ 
            if (e instanceof
  CaptchaTextException || e instanceof CaptchaMaxChallengesException
  ){ 
                  SessionErrors.add(actionRequest,
  e.getClass(), e); 
            }else{ 
                  System.out.println("Captcha
  verification success::"); 
            } 
      } 
      } 
      @Override 
      public void
  serveResource(ResourceRequest resourceRequest, 
                  ResourceResponse
  resourceResponse) 
            throws  IOException, PortletException { 
            try { 
                  CaptchaUtil.serveImage(resourceRequest,
  resourceResponse); 
            } 
            catch (Exception e)
  { 
                  //_log.error(e); 
            } 
      } 
      protected boolean
  isCheckMethodOnProcessAction() { 
            return _CHECK_METHOD_ON_PROCESS_ACTION; 
      } 
      private static final boolean _CHECK_METHOD_ON_PROCESS_ACTION = false; 
} | 
Author
Meera
Prince
 
 
 
 Posts
Posts
 
 
