2011-09-29 79 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。

相關問題