代码之家  ›  专栏  ›  技术社区  ›  maxx777 Syed Shoaib Abidi

JCaptcha4Truts2插件,未加载图像

  •  2
  • maxx777 Syed Shoaib Abidi  · 技术社区  · 10 年前

    我对struts很陌生,我正在开发一个使用captcha验证的应用程序。在对预先构建的captcha插件进行研究后,我决定使用 JCaptcha4Truts2 .

    很快我遇到了一系列麻烦。我解决了所有问题,但我无法解决这个问题。

    我做了演示应用程序中给出的一切,但在我的应用程序中,图像显示不正确。实际上,只有一个黑色矩形出现。以下是我正在使用的一组库:

    • 通用集合-3.1
    • 通用io-2.2
    • 通用语言3-3.1
    • 常见记录-1.1.3
    • 常见日志-pi-1.1
    • 自由标记-2.319
    • 欧尼-3.0.6
    • 支柱2-核心-2.3.16.1
    • x工作-核心-2.3.16.1
    • javax.mail-1.5.1 odbc7
    • javassist-3.11.10.GA
    • 通用文件上传-1.3.1
    • 第2-2.0.2节
    • 支柱2-jquery-plugin-3.7.0
    • jcaptcha-1.0
    • jcaptcha-api-1.0
    • 图像-1012005
    • 安特尔-2.7.2

    我使用的开发环境是: netbeans 8.0、jdk 1.8、java ee 7

    请帮助或建议struts2的其他captcha选项(考虑到我对struts很陌生,项目截止日期也不远)。

    编辑:我读到struts 2.3.16在图像方面有一些问题,所以我也尝试了struts 2.0.11库

    JSP文件

    <%@taglib prefix="jcaptcha"  uri="http://code.google.com/p/jcaptcha4struts2/taglib/2.0" %>
    //some html code
        <s:form name="login" action="login" method="post">
             <s:textfield name="username" label="Username" size="20" autofocus="true" />
             <s:password name="password" label="Password" size="20" />
             <jcaptcha:image label="Enter the text" height="30" width="100"/>
             <s:submit name="submit" label="Submit" align="center" />
         </s:form>
    

    支柱.xml

    <struts>
        <constant name="struts.devMode" value="true" />
        <constant name="struts.action.extension" value="," />
    
        <package name="default" extends="jcaptcha4struts2-default">
            <action name="login"
                class="UserLoginAction"
                method="execute">
            <interceptor-ref name="jcaptchaDefaultStack"/>
            <result name="success">/profile.jsp</result>
            <result name="input">/</result>
            <result name="login">index.jsp</result>
            <result name="error">/</result>
        </action>     
    
     </package>
    
    </struts>
    

    编辑2:我进一步尝试使用各种不同的排列和版本的库(其中大多数是最新的,现在我得到了例外

    2014-04-07 16:15:25,874 DEBUG org.apache.struts2.dispatcher.Dispatcher.debug:80 - Exception occurred during processing request: null
    java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:483)
        at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:450)
        at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:289)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:252)
        at org.apache.struts2.interceptor.DeprecationInterceptor.intercept(DeprecationInterceptor.java:41)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
        at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:256)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
        at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:167)
        at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
        at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:265)
        at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
        at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
        at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
        at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:249)
        at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
        at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:249)
        at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
        at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:191)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
        at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:73)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
        at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:91)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
        at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:252)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
        at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
        at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
        at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
        at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171)
        at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
        at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:139)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
        at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
        at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:193)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
        at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:189)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
        at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54)
        at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:562)
        at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
        at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:136)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:74)
        at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:516)
        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1015)
        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:652)
        at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:222)
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1575)
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1533)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:744)
    Caused by: java.lang.NoSuchMethodError: com.jhlabs.image.WaterFilter.setAmplitude(D)V
        at com.octo.captcha.engine.image.gimpy.DefaultGimpyEngine.buildInitialFactories(DefaultGimpyEngine.java:59)
        at com.octo.captcha.engine.image.ListImageCaptchaEngine.<init>(ListImageCaptchaEngine.java:24)
        at com.octo.captcha.engine.image.gimpy.DefaultGimpyEngine.<init>(DefaultGimpyEngine.java:48)
        at com.octo.captcha.service.image.DefaultManageableImageCaptchaService.<init>(DefaultManageableImageCaptchaService.java:32)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:408)
        at java.lang.Class.newInstance(Class.java:433)
        at com.google.code.jcaptcha4struts2.core.beans.JC4S2Config.getDefaultImageCaptchaService(JC4S2Config.java:110)
        at com.google.code.jcaptcha4struts2.core.beans.JC4S2Config.getImageCaptchaService(JC4S2Config.java:82)
        at com.google.code.jcaptcha4struts2.core.actions.JCaptchaImageAction.getImageCaptchaService(JCaptchaImageAction.java:107)
        at com.google.code.jcaptcha4struts2.core.actions.JCaptchaImageAction.execute(JCaptchaImageAction.java:75)
        ... 73 more
    
    1 回复  |  直到 10 年前
        1
  •  0
  •   Andrewani    10 年前

    这个JCaptcha库真的很旧,根据其代码库的状态,它是一个废弃的项目。 此库的问题是它使用了非常特定的版本 JH Labs Image filters 对于CAPTCHA图像失真,此版本不支持JDK1.8,仅支持1.6。

    但如果你使用reCAPTCHA,它应该不会再困扰你了。刚刚决定分享我的发现。