2011-09-29 73 views
0

当我尝试在grails 1.3.7上使用jcaptcha插件时,我正面临以下错误。在grails 1.3.7上使用jcaptcha插件时出现错误1.3.7

org.codehaus.groovy.runtime.typehandling.GroovyCastException: 
    Cannot cast object '{}' with class 'groovy.util.ConfigObject' to class 'com.octo.captcha.service.CaptchaService' due to: 
    groovy.lang.GroovyRuntimeException: Could not find matching constructor for: com.octo.captcha.service.CaptchaService(groovy.util.ConfigObject) 
    at org.grails.plugin.jcaptcha.JcaptchaService.getCaptchaService(JcaptchaService.groovy:42) 
    at org.grails.plugin.jcaptcha.JcaptchaService$$FastClassByCGLIB$$98874858.invoke(<generated>) 
    at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149) 
    at org.grails.plugin.jcaptcha.JcaptchaService$$EnhancerByCGLIB$$468f85f9.getCaptchaService(<generated>) 
    at org.grails.plugin.jcaptcha.JcaptchaService$getCaptchaService.call(Unknown Source) 
    at org.grails.plugin.jcaptcha.JcaptchaController$_closure1.doCall(JcaptchaController.groovy:29) 
    at org.grails.plugin.jcaptcha.JcaptchaController$_closure1.doCall(JcaptchaController.groovy) 
    at java.lang.Thread.run(Thread.java:619) 

同样的任何指针都会很有帮助。 在此先感谢。

+0

如果你可以显示你用来集成JCaptcha的(控制器)代码,它会有所帮助。从上面的堆栈跟踪看来,您尝试从配置文件中检索您的jcaptcha凭据的代码看起来有问题 –

回答

0

当使用JCaptcha和Grails时,您需要“定义验证码”:这意味着您必须根据生成的Jcaptchas指定规则。

您的验证码是在你的conf定义/ Config.groovy中的文件:关于如何创建这些@http://www.grails.org/JCaptcha+Plugin

1

像 “captcha1” 该字符串

jcaptchas { 
    captcha1 = … 
    captcha2 = … 
} 

更多信息(如果您在这样的Config.groovy中命名验证码)是jcaptchaService.validateResponse预期的第一个参数,用于确定使用哪个验证码实例。

Config.groovy中Exmpl:

... 
captchas { 
    captcha1 = new GenericManageableCaptchaService(...) 
} 
... 

的视图中使用类似的验证码:

<jcaptcha:jpeg name="captcha1" /> ... 
<g:textField name="user_typed_captcha" value="" /> 

,并在控制器类似的东西:

if(jcaptchaService.validateResponse("captcha1", session.id, params.user_typed_captcha)) { 
    log.info("CAPTCHA WAS VALID!") 
} else { 
    log.info("CAPTCHA WAS NOT VALID!") 
} 

这应该使用控制器中的jcaptcha解决您的问题。

对于我在CommandObjects中使用jcaptchaService没有解决。我认为原因是验证方法出于某种原因被称为两次,这使得捕获无效。我使用Grails 1.3.7。

相关问题