quinta-feira, 17 de março de 2011

JCaptcha em Grails - Exemplo


1. Utilizando o DOS ou Shell, vá pro diretório do seu projeto grails e execute o comando "grails install-plugin jcaptcha";
2. No Config.groovy, crie uma captcha:
//JCAPTCHA
import java.awt.Font
import java.awt.Color
import com.octo.captcha.service.multitype.GenericManageableCaptchaService
import com.octo.captcha.engine.GenericCaptchaEngine
import com.octo.captcha.image.gimpy.GimpyFactory
import com.octo.captcha.component.word.wordgenerator.RandomWordGenerator
import com.octo.captcha.component.image.wordtoimage.ComposedWordToImage
import com.octo.captcha.component.image.fontgenerator.RandomFontGenerator
import com.octo.captcha.component.image.backgroundgenerator.GradientBackgroundGenerator
import com.octo.captcha.component.image.color.SingleColorGenerator
import com.octo.captcha.component.image.textpaster.NonLinearTextPaster

import com.octo.captcha.service.sound.DefaultManageableSoundCaptchaService
jcaptchas {
image = new GenericManageableCaptchaService(
new GenericCaptchaEngine(
new GimpyFactory(
new RandomWordGenerator("abcdefghijklmnopqrstuvwxyz1234567890"),
new ComposedWordToImage(new RandomFontGenerator(
20, 30, [new Font("Arial", 0, 10)] as Font[]),
new GradientBackgroundGenerator(140, 35,
new SingleColorGenerator(Color.white),
new SingleColorGenerator(new Color(152, 245, 255))),
new NonLinearTextPaster(6, 6, new Color(108, 123, 139))
)
)
),
180,
180000)
}
3. No create.gsp (ou outra gsp), adicione o campo:
<tr class="prop">
<td valign="top" class="name">
<label> </label><jcaptcha:jpeg name="image"/>
</td>
<td valign="top" class="name">
<label>O que há na imagem?</label><br>
<g:textField name="captcha" value="" />
</td>
</tr>
4. No seu controller:
if (!jcaptchaService.validateResponse("image", session.id, params.captcha)) {
pessoaInstance.errors.reject("blank.captcha")
}
5. Crie uma linha no messages.properties com o chave "blank.captcha" e o texto desejado. Ex.:
blank.captcha=Informe corretamente o texto da imagem

Pronto!

2 comentários:

  1. Para todas as classes importadas do com.octo.captcha esta dando a mensagem de erro abaixo.

    unable to resolve class com.octo.captcha.service.multitype.GenericManageableCaptchaService

    ResponderExcluir
  2. Anônimo, o plugin foi instalado com sucesso? Verifique o http://www.grails.org/JCaptcha+Plugin. Abraço.

    ResponderExcluir