Java
jetty
備忘録
reCAPTCHA

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

はじめに

うちのサービス、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