`
romejiang
  • 浏览: 96863 次
  • 性别: Icon_minigender_1
  • 来自: ...
社区版块
存档分类
最新评论

给Grails添加验证码插件

阅读更多

在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)
 )
)

 

分享到:
评论
4 楼 craengjava 2013-06-23  
我这里不能显示图片,也没有报什么错误。
3 楼 chenlb 2009-05-20  
音频验证器 意义不大
2 楼 romejiang 2008-08-28  
grails-app/conf/Config.groovy 中定义的只是图片显示的规则和样式。不是验证器。这个插件不会自动验证,你需要在Action里写你的验证代码。如下面这样:
if (!jcaptchaService.validateResponse("imageCaptcha", session.id, params.code)) {
            flash.message = "验证码填写不正确。"
            return render(view: 'index', model: [user: user])
        }


第二个错误是因为你在页面中没有正确的调用。应该这下面这样。imageCaptcha这个名字对应你在Config.groovy 中配置的名字。
<jcaptcha:jpeg name="imageCaptcha"  />

文章中的代码就是真是的例子.
1 楼 vdgame 2008-08-16  
问几个问题:
1、在grails-app/conf/Config.groovy 文件中定义的验证器是做什么用的,在哪里调用!
2、在显示验证码时出现一堆错误,跟踪进去发现是JcaptchaController.groovy中的
if (params.id == null) throw new IllegalStateException("JcaptchaController action called with no id (captcha name)")抛出的异常!不知是什么原因!
3、是否能提供个实例参考一下!

相关推荐

    Grails安装SVN客户端插件指导手册

    选择它,这将开启一个新的软件安装向导,这是Eclipse中添加新插件的标准途径。 在“Install New Software…”窗口中,你会看到一个空白区域,用于输入插件的更新站点。在这个区域的右上角,有一个“Add”按钮,点击...

    eclipse开发grails插件

    同样地,可以通过Eclipse的"Help" -&gt; "Install New Software",添加Grails插件的更新站点(如:http://dist.springsource.org/snapshot/GRails/studio/eclipse/)并完成安装。 3. **配置Grails环境**:安装插件后,...

    grails-shiro-ui:Grails Shiro UI 插件

    1. 添加依赖:在Grails项目的`build.gradle`文件中添加插件依赖,如`compile 'org.grails.plugins:grails-shiro-ui:版本号'`。 2. 配置Shiro:在`Config.groovy`文件中配置Shiro的设置,包括安全 Realm、认证策略、...

    eclipse插件grails(groovy)

    首先,安装Groovy和Grails插件是至关重要的。你可以通过Eclipse的内置Marketplace来查找并安装Groovy和Grails Development Tools (GDT)。打开Eclipse,点击"Help" &gt; "Eclipse Marketplace",然后在搜索框中输入...

    grails 中文文档+grails-fckeditor-0.9.5.zip插件

    3. 扩展性:FCKEditor插件可以与其他Grails插件(如文件上传插件)配合使用,提供更强大的功能,如图片管理和多媒体资源管理。 4. 版本兼容:虽然grails-fckeditor-0.9.5是较旧的版本,但理解其工作原理有助于我们...

    grails-pjax:Grails Pjax插件云可帮助您在Grails中使用pjax

    Grails Pjax插件Pjax在Grails中。 Pjax类似于(turbolinks)[ ,在'A'标签,按钮和表单上工作。 参见_pjaxHeader grails templtate文件中的演示代码。 ## Pjax是什么? Pjax是一个jQuery插件,它使用ajax和pushState...

    grails-acegi-0.5.zip

    1. `AcegiGrailsPlugin.groovy`:这是Grails插件的核心配置文件,它定义了插件的元数据、依赖项、安装和卸载时的钩子函数等,是插件生命周期管理的关键。 2. `application.properties`:这个文件用于存储应用的属性...

    grails-4.0.4.zip

    5. **插件系统**:Grails的插件系统是其灵活性的一大体现,允许开发者复用和扩展功能。例如,有用于安全性的spring-security-core插件,用于邮件发送的mail插件,以及用于RESTful API的rest-api-doc插件等。这些插件...

    elasticsearch-grails-plugin, 恢复的ElasticSearch grails插件.zip

    elasticsearch-grails-plugin, 恢复的ElasticSearch grails插件 Elasticsearch插件插件这个项目是一个基于Elasticsearch的插件,这个项目是基于的人完成的伟大工作的。你为什么想要为原来的Elasticsearch插件提供...

    Eclipse下搭建Grails项目

    注意,尽管Eclipse对Grails的支持相比IntelliJ IDEA和NetBeans可能稍显不足,但通过Groovy Eclipse插件的配置,开发者依然能在Eclipse中高效地进行Grails开发。不断更新插件和学习最佳实践将有助于提升开发体验。

    Grails Grails Grails

    3. **插件系统**:Grails 插件是一组可重用的功能模块,可以快速增强应用程序的功能,如Spring Security、Asset Pipeline等。 4. **命令行工具**:Grails 提供强大的命令行工具,支持创建项目、运行应用、生成代码...

    Grails-MyBatis:用于 Grails 框架的 MyBatis 插件

    用于 Grails 框架的 MyBatis 插件 基于原始 Grails-iBatis 插件:Brian Sanders ( ) Grails 插件主页: : 修改: 命名约定的一些变化 添加了对多个数据源的完全支持 Grails 2.0 插件重构 最小 Grails 依赖项 ...

    Grails权威指南 Grails权威指南

    5. **Grails插件系统**:Grails拥有庞大的插件库,涵盖各种功能,如安全、缓存、报表、测试等。通过插件,开发者可以轻松地扩展框架功能,避免重复造轮子。 6. **Grails构建工具**:Grails的构建系统自动化处理许多...

    grails框架

    实际上,一个grails插件和一个grails应用基本是完全一样的,同样可以使用grails run-app命令来运行。区别仅在于一个插件的根目录下需要提供一个fooplugin.groovy文件,提供插件的一些描述信息。

    grails中文入门简介

    最后,Grails社区还提供了丰富的插件库,这些插件可以扩展Grails的功能,例如添加缓存支持、邮件服务或者其他定制化功能。开发者可以很方便地在Grails项目中集成这些插件来增强应用程序的能力。 Grails框架的中文...

    grails-acegi-0.5.2.zip

    8. **scripts**:脚本目录,包含了Grails的命令行脚本,插件可能添加了自定义的脚本来简化安装或配置过程。 在实际使用Grails Acegi 0.5.2时,开发者可以利用其提供的安全拦截器、过滤器和标签库来实现用户登录、...

    grails-用户手册

    五、Grails插件系统 Grails的插件系统是其一大亮点,许多常见的功能,如安全、缓存、报表等,都有现成的插件可以直接集成。比如,spring-security-core 提供了全面的安全管理,cache 提供了缓存功能。 六、GSP...

    Grails plugin: Calendar

    **Grails插件:Calendar** Grails是一款基于Groovy语言的开源Web应用框架,它简化了Java开发,提供了丰富的功能和灵活的架构。在Grails社区中,开发人员经常创建插件来扩展框架的功能,满足特定的需求。"Calendar...

Global site tag (gtag.js) - Google Analytics