Liferay – Validación CAPTCHA en formularios


Una buena forma de validar si los formularios que tenemos en nuestro portal son rellenados por un humano o un autómata, es añadir un ‘Completely Automated Public Turing test to tell Computers and Humans Apart’ o lo que conocemos todos como un CAPTCHA.

Para eso Liferay nos facilita una librería para generar los CAPTCHA:

Básicamente tenemos que modificar nuestro jsp y la clase java donde se tratan las acciones del portlet.

En el jsp:

Al principio añadiremos las clases para las excepciones y, después, tan solo hace falta añadir dentro del form, que hayas hecho, las sentencias para generar el CAPTCHA:

<%@page import=“com.liferay.portal.kernel.captcha.CaptchaTextException”%><%@page import=“com.liferay.portal.kernel.captcha.CaptchaMaxChallengesException”%> <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=“addElementURL” name=“addElement” /><aui:form action=<%= addElementURL %> method=“post” name=“fm”><aui:input  name=“firstName” value=“”/><aui:input  name=“lastName” value=“”/><aui:input  name=“email” value=“”/><portlet:resourceURL var=“captchaURL”/><liferay-ui:captcha url=<%=captchaURL%> /><aui:button type=“submit” /></aui:form>

En el java:

Dentro de la función que se ejecuta por la acción se ha de validar en la parte del servidor que el Captcha se ha introducido bien:

public void addElement(ActionRequest actionRequest, ActionResponse actionResponse)throws IOException, PortletException {String firstName=ParamUtil.getString(actionRequest,”firstName”);String lastName=ParamUtil.getString(actionRequest,”lastName”);String lastName=ParamUtil.getString(actionRequest,”email”);try{        CaptchaUtil.check(actionRequest);
        if (!validateParameters(firstName,lastName,email)) {
            SessionErrors.add(actionRequest, “error”);
        }
        else {         System.out.println(“Captcha success!”);
            SessionMessages.add(actionRequest, “success”);
        }
    }
    catch (CaptchaTextException cte) {System.out.println(“Captcha error!”);SessionErrors.add(actionRequest,CaptchaTextException.class.getName());}}

Además, añadimos la función para servir el Captcha en la misma clase Java:

@Overridepublic void serveResource(ResourceRequest resourceRequest,             ResourceResponse resourceResponse)           throws  IOException, PortletException {try {             CaptchaUtil.serveImage(resourceRequest, resourceResponse);      }      catch (Exception e) {            System.out.println(“Captcha serve error!”);      }}

Y así, ¡ya debería funcionar nuestro formulario!


Leave a Reply

Your email address will not be published. Required fields are marked *