In questo post vediamo come possiamo utilizzare il captcha all'interno delle nostre portlet.
Per prima cosa dobbiamo mostrare l'immagine del captcha sulla nostra pagina, per permettere all'utente di leggerlo.
Per fare questo dobbiamo:
- sovrascrivere un metodo nella nostra portlet che viene specificato dal JSR286:serveResource
- utilizzare una taglibrary di Liferay per poter mostrare l'immagine
Vediamo l'implementazione del metodo che dobbiamo implementare nella nostra action:
@Override
public void serveResource(ResourceRequest resourceRequest,
ResourceResponse resourceResponse)
throws IOException, PortletException {
CaptchaUtil.serveImage(resourceRequest, resourceResponse);
}
Come vedete, questo metodo serve l'immagine utilizzando la classe CaptchaUtil messa a disposizione da Liferay.
Ora dobbiamo mostrare l'immagine nella nostra JSP; per fare questo dobbiamo:
- importare la tag library che contiene la facility per il captcha
- utilizzare la tag library
Per importare nella JSP la tag library usiamo questo statement:
<%@ taglib uri="http://liferay.com/tld/ui" prefix="liferay-ui" %>
Mentre, per stampare il captcha sulla pagina, utilizzamo questa chiamata:
<portlet:resourceURL var="captchaURL"/>
...
<liferay-ui:captcha url="<%= captchaURL %>" />
La prima chiamata genera, utilizzando la API di portale, la stringa per chiamare il nostro metodo nella action; la seconda, invece, è la faciliy messa a disposizione da Liferay per mostrare in pagina il captcha.
Ora, una volta messo tutto dentro ad un tag form, possiamo andare nel codice a verificare che l'utente immetta correttamente il valore del captcha:
@Override
public void processAction(ActionRequest actionRequest,
ActionResponse actionResponse) throws IOException, PortletException {
try {
// Controllo l'input utente
CaptchaUtil.check(actionRequest);
} catch (CaptchaException e) {
// in caso d'errore segnalo in pagina l'errore
SessionErrors.add(actionRequest, e.getClass().getName());
}
}
Per gestire in pagina l'errore, possiamo utilizzare le tag library di Liferay:
<liferay-ui:error exception="<%= CaptchaTextException.class %>"
message="Verificare il testo del captcha!" />
<liferay-ui:error exception="<%= CaptchaMaxChallengesException.class %>"
message="Numero massimo di tentativi raggiunti!" />
Se tutto va come deve, abbiamo il captcha nella nostra form di dati e riusciamo a verificarlo senza problemi! ;)
Alla prossima!:)