Posted at

Jetty embedded で recaptchaを実装してみる。

More than 1 year has passed since last update.


はじめに

うちのサービス、https://mirm.jp にもreCAPTHCAを実装したいと思い、、、新規サーバー作成時にpostでごりごりアクセスされたら困るんでね。

備忘録なんで、かなり雑です。


html上での実装

https://www.google.com/recaptcha/admin

まずはrecaptchaのキーをもらうために登録してくださいな。

<head>

。。。。。。

<script src='https://www.google.com/recaptcha/api.js'></script>

。。。。。。
</head>

フォーム内に混ぜてくださいな。

<div class="g-recaptcha" data-callback="clearcall" data-sitekey="ここにサイトキーをいれる"></div>
<input type="submit" value="作成!">


Java側の実装


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.URL;
import java.nio.charset.Charset;

import org.json.JSONException;
import org.json.JSONObject;

public class getJsonFromWeb {

private static String readAll(Reader rd) throws IOException {
StringBuilder sb = new StringBuilder();
int cp;
while ((cp = rd.read()) != -1) {
sb.append((char) cp);
}
return sb.toString();
}

public static JSONObject readJsonFromUrl(String url) {
try (InputStream is = new URL(url).openStream()) {
BufferedReader rd = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8")));
String jsonText = readAll(rd);
return new JSONObject(jsonText);
} catch (IOException | JSONException e1) {
return new JSONObject("{\"success\": false,\"error-codes\": \"jsondecodeerror\"}");
}

}
}

クエリを出して。。。
//recapthca
if (recaptchacode == null) {
result = create_recaptchaerror;
elog("[ReCapError1]"+ip+ua+"[srvid]"+srvid);
continue;
}

String secretKey = "きーーーーーーー";

JSONObject jsoned = readJsonFromUrl("https://www.google.com/recaptcha/api/siteverify?secret="+secretKey+"&response="+recaptchacode);

try {
if (!jsoned.getBoolean("success")) {
result = create_recaptchaerror;
continue;
}
}catch (Exception e){
result = create_recaptchaerror;
continue;
}
//////////////


まとめ

メモですけど、こんな感じ。


参考

https://liapoc.com/recaptcha.html

https://stackoverflow.com/questions/4308554/simplest-way-to-read-json-from-a-url-in-java