2017-12-03 26 views
2

これはQです&私は質問と回答の両方を投稿するスタイルの投稿です。これの主な理由は、私がrecaptcha V2を検証する最も簡単な方法を探すためにかなりの時間を費やしたことです。だから私は開発者の時間の無駄を避けるために私の知識を共有するつもりです。 JavaのでGoogle reCAPTCHAのV2または見えないreCAPTCHAの、サーバー側の検証を行う方法reCAPTCHA V2 Java(サーブレット)の検証方法

答えて

1

私はこのためにorg.jsonライブラリを使用しています。 jarファイルをhereから取得するか、docsをお読みください。 jarファイルをプロジェクトに追加し、次のクラスをインポートします。

import java.io.BufferedReader; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.net.URL; 
import java.nio.charset.Charset; 
import org.json.JSONObject; 

次の検証方法を使用してください。

/** 
* Validates Google reCAPTCHA V2 or Invisible reCAPTCHA. 
* @param secretKey Secret key (key given for communication between your site and Google) 
* @param response reCAPTCHA response from client side. (g-recaptcha-response) 
* @return true if validation successful, false otherwise. 
*/ 
public static boolean isCaptchaValid(String secretKey, String response) { 
    try { 
     String url = "https://www.google.com/recaptcha/api/siteverify?" 
       + "secret=" + secretKey 
       + "&response=" + response; 
     InputStream res = new URL(url).openStream(); 
     BufferedReader rd = new BufferedReader(new InputStreamReader(res, Charset.forName("UTF-8"))); 

     StringBuilder sb = new StringBuilder(); 
     int cp; 
     while ((cp = rd.read()) != -1) { 
      sb.append((char) cp); 
     } 
     String jsonText = sb.toString(); 
     res.close(); 

     JSONObject json = new JSONObject(jsonText); 
     return json.getBoolean("success"); 
    } catch (Exception e) { 
     return false; 
    } 
} 

コール以下に示すように、上記の方法、このことができます

if(isCaptchaValid("enter_your_key_here", request.getParameter("g-recaptcha-response"))){ 
    //valid 
} 

希望。乾杯!

+1

コードの解説を受け取ることに興味がある場合は、[コードレビューサイト](https://codereview.stackexchange.com/)に掲載することもできます。 – markspace

+0

@markspace sure ...ありがとう! –

関連する問題