在Grails安全验证插件分类中有几个和验证码相关的插件。
Simple Captcha Plugin : 比较简单的实现了图片显示验证码
JCaptcha Plugin :基于 JCaptcha 开源图片和音频验证码项目的Grails插件
ReCaptcha Plugin :基于 ReCaptcha 开源图片和音频验证码项目的Grails插件
这次主要介绍如何使用 JCaptcha 插件,因为JCaptcha相对比较成熟和稳定,功能完善可调整的内容也比较丰富。
安装
在 http://plugins.grails.org 网站下载 JCaptcha 插件。
然后进入你的项目目录, grails install-plugin %path%/grails-jcaptcha-0.2.zip
这里没有使用Grails的自动安装因为那样很慢,而且Grails自己下载也不支持断点,所以还是自己下载来的方便,特别是比较大的插件。
配置
在grails-app/conf/Config.groovy 文件中 定义验证器(captchas),
定义例子如下:
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
jcaptchas {
imageCaptcha = new GenericManageableCaptchaService(
new GenericCaptchaEngine(
new GimpyFactory(
new RandomWordGenerator(
"abcdefghijklmnopqrstuvwxyz1234567890"
),
new ComposedWordToImage(
new RandomFontGenerator(
20, // min font size
30, // max font size
[new Font("Arial", 0, 10)] as Font[]
),
new GradientBackgroundGenerator(
140, // width
35, // height
new SingleColorGenerator(new Color(255, 255, 255)),
new SingleColorGenerator(new Color(200, 200, 200))
),
new NonLinearTextPaster(
4, // minimal length of text
4, // maximal length of text
new Color(11, 11, 11)
)
)
)
),
180, // minGuarantedStorageDelayInSeconds
180000 // maxCaptchaStoreSize
)
}
上面的代码是定义了两个验证器(captcha),一个图形验证器 imageCaptcha ,一个音频验证器 soundCaptcha;
imageCaptcha使用了自定义的方式,配置了很多参数。默认的图像验证器是 DefaultManageableImageCaptchaService
soundCaptcha使用了默认的验证器。
你可以配置更多的验证器以及规则,也可以就配置一个,比如这个音频的验证器一般不需要就可以删除掉。如果因为你的业务需要你要一个六字的验证和一个四字的验证,这样的情况就可以配置两个图像验证器。
ps:我在使用音频验证器时grails报错,因为音频使用到了一些音频处理的API,而我没有这些包,所以删除音频验证器以及涉及音频验证器的包即可。如果你确实需要音频验证器,那就你看错误信息,找到这些包然后放在项目的lib里。
ps:安装 JCaptcha 插件时会在plugins中安装插件的项目结构,其中也会安装conf/Config.groovy文件。如果运行Grails发生Config.groovy错误,删除插件中的配置文件即可plugins\jcaptcha-0.2\grails-app\conf\Config.groovy
显示
完成上面的配置之后,你得到一个验证器名称:imageCaptcha 。然后在需要的gsp页面中使用下面的tag。
<jcaptcha:jpeg name="<captchaname>" />
<captchaname>就是你的验证器名称:imageCaptcha
正常的情况下你就可以看到验证图片了。这个验证图片的颜色,字体,大小,内容都可以通过前面的自定义配置去修改和完善。
验证
在控制器中需要验证用户输入的验证码和验证图片中显示的是否一致。首先要在控制器中声明一个jcaptchaService对象,以便spring依赖注入 jcaptchaService 这个类。
然后在具体的验证Action中使用jcaptchaService.validateResponse("imageCaptcha", session.id, params.code)方法具体验证。
第一个参数是你的验证器名称。
第二个参数是比较固定就是 session.id
第三个参数是 页面中填写验证码输入框的内容,根据你的输入框的名字XXX,params.XXX
def jcaptchaService
def save = {
def user = new User(params)
if (!jcaptchaService.validateResponse("captchaName", session.id, params.captchaResponse))
{
flash.message = "认证码错误!"
return render(view:'index',model:[user:user])
}
// other logic
}
高级玩法
前面在配置图像验证器时我们已经发现,我们可以通过配置改变验证图片的很多特性。现在深入看看我们都能改变什么。
new RandomWordGenerator("") 可以配置随机生成图片内容的字符范围
new ComposedWordToImage(
new RandomFontGenerator( // 生成图片文字的字体以及字号大小,可以是多种字体,会随机出现。
20, // min font size
30, // max font size
[new Font("Arial", 0, 10)] as Font[]
),
new GradientBackgroundGenerator(// 配置验证图片的大小和背景色以及过渡色
140, // width
35, // height
new SingleColorGenerator(new Color(0, 60, 0)),
new SingleColorGenerator(new Color(20, 20, 20))
),
new NonLinearTextPaster(
6, // minimal length of text
6, // maximal length of text
new Color(0, 255, 0)
)
)
分享到:
相关推荐
在help菜单选择Install New Software…
Grails Shiro UI 插件 请参阅。
eclipse插件、用来开发grails(路漫漫其修远兮、吾将上下而求索)
Grails Pjax插件Pjax在Grails中。 Pjax类似于(turbolinks)[ ,在'A'标签,按钮和表单上工作。 参见_pjaxHeader grails templtate文件中的演示代码。 ## Pjax是什么? Pjax是一个jQuery插件,它使用ajax和pushState...
eclipse插件grails(groovy)配置方法
Grails Grails Grails Grails Grails
用于 Grails 框架的 MyBatis 插件 基于原始 Grails-iBatis 插件:Brian Sanders ( ) Grails 插件主页: : 修改: 命名约定的一些变化 添加了对多个数据源的完全支持 Grails 2.0 插件重构 最小 Grails 依赖项 ...
grails 中文文档+grails-fckeditor-0.9.5.zip插件
elasticsearch-grails-plugin, 恢复的ElasticSearch grails插件 Elasticsearch插件插件这个项目是一个基于Elasticsearch的插件,这个项目是基于的人完成的伟大工作的。你为什么想要为原来的Elasticsearch插件提供...
实际上,一个grails插件和一个grails应用基本是完全一样的,同样可以使用grails run-app命令来运行。区别仅在于一个插件的根目录下需要提供一个fooplugin.groovy文件,提供插件的一些描述信息。
本文内容包括:ShortenUrl插件简介创建TinyUrl类测试TinyUrl类创建IsGd类创建ShortenUrl服务打包并部署插件结束语下载参考资料在这个“精通Grails”系列中,ScottDavis将向您展示如何创建您自己的Grails插件。...
grails-4.0.4.zip
Grails权威指南Grails权威指南Grails权威指南Grails权威指南Grails权威指南Grails权威指南
Elasticsearch Grails 插件 - 示例应用Elasticsearch Grails 插件的示例应用程序。 插件主页由 Noam Y. Tenne 维护并托管在 。为什么? 如果您习惯了 grails 但从未使用过 ,那么安装插件后您可能会有点迷茫。 ...
概括Grails插件将Primefaces集成到Grails项目中。 带有Java JDK 1.7的最低Grails版本是2.3.7,并且依赖项具有以下版本: 核心JSF 2.2 Primefaces 5.2 Apache MyFaces 2.2.8 可以在上找到源代码安装通过在BuildConfig...
Grails异步邮件插件 描述 Grails异步邮件是用于异步发送电子邮件的插件。 它使用Grails域类将电子邮件消息持久化到数据库中,并通过计划的Quartz作业发送它们。 邮件是在不同的线程上发送的,并且...
MongoDB Grails插件主要作为称为“ mongo”的Spring bean公开给Grails应用程序。 然后,只需添加“ mongo”,Grails类就可以轻松地在整个代码中使用它。 支持依赖注入(域/控制器/服务)的类的属性,例如: class ...
Grails的Cucumber是插件用于基于 。 Cucumber-JVM是Cucumber的JVM实现,支持许多JVM语言。 有关更多信息,请参见 ,尤其是或简单示例中的。 快速使用 该插件将Cucumber作为集成到grails测试基础架构中。 这意味着您...
Grails Spring安全核心插件 请参阅以获取更多信息。 分支机构 master与Grails 4.x兼容 3.3.x使用Grails 3.3.x兼容 3.2.x使用Grails 3.2.x中兼容