JCaptcha Plugin :基于 JCaptcha 開(kāi)源圖片和音頻驗(yàn)證碼項(xiàng)目的Grails插件
而jcaptcha-1.0終于出來(lái)了. 比起0.2輕量了很多, 而且0.2里面有不少無(wú)用的東西...
現(xiàn)在grails-app下面主要的文件就剩下JcaptchaController.groovy, JcaptchaService.groovy, JcaptchaTagLib.groovy了.
JcaptchaTagLib.groovy里面其實(shí)也就定義了兩個(gè)標(biāo)簽, 一個(gè)用戶圖片驗(yàn)證(jpeg), 一個(gè)用于語(yǔ)音驗(yàn)證(wav).
JcaptchaController.groovy里面則定義了主要兩個(gè)action(jpeg和wav)用于JcaptchaTagLib.groovy的兩個(gè)標(biāo)簽調(diào)用.
JcaptchaService.groovy則定義了四個(gè)常用方法, 主要是boolean validateResponse(captchaName, id, response)用于驗(yàn)證輸入驗(yàn)證碼是否正確
下面看看使用驗(yàn)證碼代碼:
首先需要在Config.groovy, 添加:
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( // 生成圖片文字的字體以及字號(hào)大小,可以是多種字體,會(huì)隨機(jī)出現(xiàn)。
20, // min font size
30, // max font size
[new Font("Arial", 0, 10)] as Font[]
),
new GradientBackgroundGenerator( // 配置驗(yàn)證圖片的大小和背景色以及過(guò)渡色
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
)
}
頁(yè)面中添加:
< input id="captchaResponse" maxlength="30" name="captchaResponse" type="text" />
< jcaptcha:jpeg name="imageCaptcha" width="100px" height="25px" >< /jcaptcha:jpeg >
Controller里面要做驗(yàn)證
if (!jcaptchaService.validateResponse("imageCaptcha", session.id, params.captchaResponse)){
flash.message = message(code:'pinpin.login.invalid.jcaptcha')
return
}