我已经在我的网络应用程序中实现了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作为运行时环境。
答案 0 :(得分:1)
验证码查找的问题在于它依赖于用户会话。在我看来,这是一个设计缺陷。如果cookie被阻止,则会话将不会链接到用户。
还有其他图书馆,例如SimpleCatcha。或其他服务,例如recaptcha。
基本上,如果您有一个为您生成验证码的库,您可以像伪算法一样实现它,而不是会话依赖:
对于包括验证码的每种表格:
如果从性能角度看这太慢,您可能会考虑使用后台进程来填充固定大小的FILO容器/队列以保存预先计算的验证码。
答案 1 :(得分:0)
如果禁用cookie,JCaptcha将无效。有一个错误:http://jcaptcha.octo.com/jira/browse/JASTR-3
您可以尝试其他库,例如recaptcha。