reCaptcha验证码 ( by quqi99 )
1) util类:
+package com.daodao.util;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.UnsupportedEncodingException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.net.URLEncoder;
+
+import com.TripResearch.util.Logging;
+
+public class GoogleCaptchaUtil
+{
+ private static final String PUBLIC_KEY = "到goole申请";
+ private static final String PRIVATE_KEY = "到goole申请";
+ private static final String VERIFY_URL = "http://api-verify.recaptcha.net/verify";
+ private static final String URL_CHARACTER_ENCODING = "UTF-8";
+
+ public static String getPublicKey()
+ {
+ return PUBLIC_KEY;
+ }
+
+ public static boolean checkAnswer(String remoteAddr, String challenge, String response)
+ {
+ String postParameters;
+ if(remoteAddr == null || challenge == null || response == null)
+ {
+ return false;
+ }
+ try
+ {
+ postParameters = "privatekey=" + URLEncoder.encode(PRIVATE_KEY,URL_CHARACTER_ENCODING) + "&remoteip=" + URLEncoder.encode(remoteAddr,URL_CHARACTER_ENCODING) +
+ "&challenge=" + URLEncoder.encode(challenge,URL_CHARACTER_ENCODING) + "&response=" + URLEncoder.encode(response,URL_CHARACTER_ENCODING);
+ }
+ catch (UnsupportedEncodingException e)
+ {
+ Logging.SERVLET.debug("Unsupported Encoding: " + e.getMessage());
+ return false;
+ }
+ String message = httpPost(VERIFY_URL, postParameters);
+
+ if (message == null) {
+ Logging.SERVLET.debug("Null read from server.");
+ return false;
+ }
+
+ String[] a = message.split("\r?\n");
+ if (a.length < 1) {
+ Logging.SERVLET.debug("No answer returned from recaptcha: " + message);
+ return false;
+ }
+ return "true".equals(a[0]);
+ }
+
+ public static String httpPost(String urlS, String postdata)
+ {
+ InputStream in = null;
+ URLConnection connection = null;
+ try
+ {
+ URL url = new URL(urlS);
+ connection = url.openConnection();
+
+ connection.setDoOutput(true);
+ connection.setDoInput(true);
+ connection.setConnectTimeout(10000);
+ connection.setReadTimeout(10000);
+
+ OutputStream out = connection.getOutputStream();
+ out.write(postdata.getBytes());
+ out.flush();
+
+ in = connection.getInputStream();
+
+ ByteArrayOutputStream bout = new ByteArrayOutputStream();
+ byte[] buf = new byte[1024];
+ while (true)
+ {
+ int rc = in.read(buf);
+ if (rc <= 0)
+ break;
+ else
+ bout.write(buf, 0, rc);
+ }
+
+ out.close();
+ in.close();
+
+ return bout.toString();
+ }
+ catch (IOException e)
+ {
+ Logging.SERVLET.debug("Cannot load URL: " + e.getMessage());
+ return null;
+ }
+ finally
+ {
+ try
+ {
+ if (in != null)
+ in.close();
+ }
+ catch (Exception e)
+ {
+ // swallow.
+ }
+ }
+ }
+
+}
2)这样调用util类:
+ public boolean verifyGoogleCaptcha(CustomServletRequest request)
+ {
+ String remoteAddr = request.getRemoteAddr();
+ String challenge = request.getParameter("recaptcha_challenge_field");
+ String uresponse = request.getParameter("recaptcha_response_field");
+ return GoogleCaptchaUtil.checkAnswer(remoteAddr, challenge, uresponse);
+ }
3)添加vm宏:
+#macro( PrepareGoogleCaptcha )
+ <script type="text/javascript" >
+ var RecaptchaOptions = { theme : 'custom', custom_theme_widget: 'recaptcha_widget' };
+ </script>
+#end
+#macro( ShowGoogleCaptcha )
+ <style type="text/css">
+ #recaptcha_widget { margin-bottom:10px; }
+ #recaptcha_image, #recaptcha_image img { width:180px !important; height:40px !important; }
+ .change-image { float:left; margin:14px 0 0; }
+ .mt5 { margin-top:5px; }
+ </style>
+ <div id="recaptcha_widget" style="display:none">
+ <div class="clearfix">
+ <div id="recaptcha_image" class="left"></div>
+ <div class="change-image"><a href="javascript:Recaptcha.reload()">看不清? 换一张!</a></div>
+ </div>
+ <div class="mt5">
+ <label for="recaptcha_response_field">请输入验证码:</label>
+ <input type="text" id="recaptcha_response_field" name="recaptcha_response_field" />
+ </div>
+ </div>
+ <div id="CAPTCHA">
+ <script type="text/javascript"
+ src="http://www.google.com/recaptcha/api/challenge?k=$recaptchaPubkey">
+ </script>
+ <noscript>
+ <iframe src="http://www.google.com/recaptcha/api/noscript?k=$recaptchaPubkey" height="300" width="500" frameborder="0"></iframe><br>
+ <textarea name="recaptcha_challenge_field" rows="3" cols="40">
+ </textarea>
+ <input type="hidden" name="recaptcha_response_field" value="manual_challenge">
+ </noscript>
+ </div>
+#end
3) 在vm中用上面的宏
#PrepareGoogleCaptcha()
+ <div class="error">
+ <b>$util.localize("rd_forums_error_header_ffffee49")</b>
+ <ul> <li>- 检证码错误,请重新输入。 </li> </ul>
+ </div>
#ShowGoogleCaptcha()
5) servlet中:
if(ServletUtils.getInstance().verifyGoogleCaptcha(request)){
addObject("invalidCaptcha", true);
// do other
}
分享到:
相关推荐
Laravel开发-recaptcha reCAPTCHA 验证码的支持 Recaptcha验证码的支持
中国人工智能极客团队MentalTrotter宣布其自主研发的模拟人脑图像识别算法已经成功破解了google的reCAPTCHA验证码,该算法只需要较小的资源但
google 很牛的Captcha---recaptcha验证码应用 轻松搞定网站验证码 国外大多数网站都使用gg此验证码 很帅的~~ 提供语音识别
reCaptcha 验证码加载(中国大陆加载reCapcha验证码油猴脚本).user.js
java对接google验证码完整示例,函前端引入google api.js与后端校验g-recaptcha-response是否合法的业务逻辑,可正常运行。
以85%的准确度击败Google的音频reCaptcha验证码
Buster是一个浏览器扩展,用于识别reCAPTCHA语音验证码
前端开源库-recaptchaRecaptcha,显示并验证Recaptcha验证码
Google 人机验证(reCaptcha)无法显示解决方案(可解决大多数 CSP 问题)
from urllib.request import urlopen from urllib.parse import urlencode import tornado.httpserver import tornado.ioloop import tornado.web #获取key: https://www.google.com/recaptcha/whyrecaptcha...
该 验证码的ASP.NET图书馆 提供了一种直接的方式把一个CAPTCHA测试ASP.NET网站在您,帮助您停止您的网站漫游滥用。 该库包装了 验证码的 空气污染指数。 你可以使用任何图书馆。NET语言,包括C#和Visual Basic。NET...
实现原理:reCAPTCHA 验证码中有2个单词,一个是已经正确识别出的,而另一个是未确定需要校对的单词。如下图示: 当用户输入验证码时,已经识别那个单词需要输入正确才能通过验证,而另一个不确定的单词,用户...
很多国外网站采用了Google的reCaptcha验证,但在国内上网是无法显示该验证的,即使用梯子也无法解决,可以采用谷歌浏览器插件来解决此问题 使用谷歌浏览器,打开 设置--->扩展程序,勾选开发者模式,把Header ...
Laravel开发-recaptcha Laravel 5的Recaptcha验证程序
ng-recaptcha, Google reCAPTCHA的Angular 组件 Google reCAPTCHA的 Angular 组件 一个简单,可以配置的easy-to-start组件,用于处理 reCAPTCHA 。目录安装工具基本用法:游乐场使用 @angular/form
recaptcha, 用于 ruby 应用的ReCaptcha帮助程序 reCAPTCHA作者:Jason L 佩里( http://ambethia.com )版权所有:版权所有( c ) 2007 -2013 Jason L 佩里许可证:信息:https://github.com/ambethia
您有过上网时需要你输入验证码,但有时候却显示不出来,从而无法登录的情况吗?试试这个小程序吧,只需要下载解压后双击并重启电脑即可,从此你将看到所有不能显示的验证码。