bloggers bloggers

Marco Napolitano
Messaggi: 79
Stelle: 0
Data: 17/02/22
Jader Jed Francia
Messaggi: 63
Stelle: 0
Data: 18/02/21
Paolo Gambetti
Messaggi: 2
Stelle: 0
Data: 11/11/19
Katia Pazzi
Messaggi: 1
Stelle: 0
Data: 27/06/19
Ezio Lombardi
Messaggi: 11
Stelle: 0
Data: 10/04/18
Chiara Mambretti
Messaggi: 25
Stelle: 0
Data: 27/02/17
Serena Traversi
Messaggi: 3
Stelle: 0
Data: 21/07/16
Francesco Falanga
Messaggi: 8
Stelle: 0
Data: 14/06/16
Antonio Musarra
Messaggi: 2
Stelle: 0
Data: 18/11/13
Simone Celli Marchi
Messaggi: 6
Stelle: 0
Data: 09/07/13
Indietro

Utilizzare il captcha in Liferay

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:

  1. importare la tag library che contiene la facility per il captcha
  2. 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!:)

Precedente
Commenti
Aggiungi Commento
francesco scamarcio
si potrebbe aggiungere un bottone di refresh per ricaricare il captcha con jquery, io lo ho aggiunto nel mio formulario e funziona bene

in saluto
Inviato il 09/07/15 14.02.
Jader Jed Francia
Ciao Francesco!
Quella che dici mi sembra un'ottima soluzione; in effetti ogni tanto anche io mi trovo a ricaricare la pagina perchè il captcha è illeggibile! ;)
Hai voglia di condividere qui il codice che hai usato, a beneficio di tutti? emoticon

Grazie in anticipo per il tuo sbattimento e grazie comunque per l'ottima idea! emoticon

Ciao, J.
Inviato il 09/07/15 14.02 in risposta a francesco scamarcio.
francesco scamarcio
qui sta il codigo:
HTML
<liferay-ui:captcha url="<%= captchaURL %>" />
<a href="#" class="captcha-reload">Recargar</a>(potrebbe essere anche una immagine

JQUERY
jQuery(".captcha-reload").click(
function() {
jQuery(".captcha").attr("src",
"<%= captchaURL %>&force=" + new Date().getMilliseconds());
return false;
});

Spero che vi serva
Inviato il 09/07/15 14.02.
Jader Jed Francia
Grazie mille per il tuo feedback Francesco! emoticon
Sei stato davvero molto gentile a condividere con noi il tuo codice! emoticon

Speriamo di poter ricambiare quanto prima! ;)

Ciao, J.
Inviato il 09/07/15 14.02 in risposta a francesco scamarcio.
Marco Napolitano
Per allinearsi agli standard di portale, sarebbe meglio utilizzare le chiavi di traduzione di Liferay e non messaggi custom.

<liferay-ui:error exception="<%=CaptchaTextException.class %>" message="text-verification-failed" />
<liferay-ui:error exception="<%=CaptchaMaxChallengesException.class %>" message="maximum-number-of-captcha-attempts-exceeded" />
Inviato il 09/07/15 14.02.
Jader Jed Francia
Tra ieri e oggi quanti schiaffoni mi vuoi dare sulle chiavi di portale?? emoticon
Comunque grazie per la puntualizzazione: è sicuramente meglio fare come dici tu, Marco! ;)
Grazie!
Inviato il 09/07/15 14.02 in risposta a Marco Napolitano.