我已经在Web应用程序中实现了JCaptcha,它可以正常工作,但是当浏览器的cookie被阻止时,它总是失败并返回false。

servlet代码如下:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {



        String userCaptchaResponse =request.getParameter("jcaptcha");
        boolean captchaPassed = SimpleImageCaptchaServlet.validateResponse(request, userCaptchaResponse);

        if(captchaPassed){
        System.out.println("success!!"+userCaptchaResponse);
        RequestDispatcher rd=request.getRequestDispatcher("Result.jsp");
        rd.forward(request, response);

        //response.sendRedirect("Result.jsp");

        }else{
            System.out.println("failure!!"+userCaptchaResponse);
            response.sendRedirect("Index.jsp"+"?id=false");

        }

    }


并且jsp页面中的代码是

<tr align="center">
<td align="right" width="33%"><img height="60px" width="140px" src="jcaptcha.jpg" /></td>
<td align="left" width="33%" valign="middle"><input type="text" name="jcaptcha" value="" /></td>
</tr>


无论饼干是否被阻止,我都希望我的验证码能够正常工作!!!
有没有解决此问题或任何其他方法来在Java中实现验证码
我正在使用jdk 1.7和tomcat 7作为运行时环境。

最佳答案

验证码查询的问题在于它依赖于用户会话。我认为这是设计缺陷。如果Cookie被阻止,则会话将不会链接到用户。

还有其他库,例如SimpleCatcha。或其他服务,例如recaptcha

基本上,如果您有一个生成验证码的库,则可以像这样将其实现为与会话无关的伪算法:

对于包括验证码在内的每种形式:


生成临时验证码
生成难以猜测的唯一标识符(可能使用uuid)。
将唯一标识符与正确的答案服务器端链接并暂时保留
在生成的表单中提供唯一标识符
如果用户发送表格,他将提供猜测和uuid,您可以在服务器端查找此对。
用户输入的答案是否正确,使UUID和图像无效。


如果从性能角度来看这太慢,则可以考虑使用后台进程来填充固定大小的FILO容器/队列,以容纳预先计算的验证码。

关于java - Cookie被阻止时,JCaptcha失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9124791/

10-12 04:47