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
anti-captcha thanks for sharing your info with us.
ReplyDeleteI was surfing the Internet for information and came across your blog. I am impressed by the information you have on this blog. It shows how well you understand this subject. https://zetamatic.com/downloads/woocommerce-mailchimp-newsletter-discount/
ReplyDeleteanti captchaGreat post thanks for share this information with us.
ReplyDeleteIn any case, the effortlessness of WordPress conceals a high level framework that, with a tad of additional information, can be made to do staggering things.
ReplyDeletewordpressctapro
Thank you for this insightful post! I found it really helpful. If you want to learn more about scaling applications, check out HyScaler for some valuable resources.
ReplyDelete