java - cookie 被阻止时 JCaptcha 失败

标签 java cookies captcha

我已经在我的网络应用程序中实现了 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>

我希望我的验证码能够工作,无论 cookie 是否被阻止! 有没有任何解决方案可以解决此问题或任何其他方法在java中实现验证码 我使用jdk 1.7和tomcat 7作为运行环境。

最佳答案

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

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

基本上,如果您有一个可以生成验证码的库,您可以像这样将其实现为不依赖于 session 的伪算法:

对于包含验证码的每个表单:

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

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

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

相关文章:

java - 如何创建一个空数组?

java - wsimport 生成的 java 中缺少命名空间

php - 如果超过 3 个错误提交,显示验证码

jquery - Cookie 未使用 jQuery 设置

reactjs - 无法从react js访问httponly cookie,但可以在 postman 应用程序中访问!这怎么可能?

c# - 有没有一种程序化的方法来检查 recaptcha 公钥和私钥的正确性?

security - 限制(和记录)登录尝试的最佳方法

java - 使用 Java 的网页索引器

java - 等待网络连接

javascript - JQuery Cookie 不起作用