Java/JSP での reCAPTCHA の使用

重要: reCAPTCHA API のバージョン 1.0 のサポートは終了しました。バージョン 2.0 にアップグレードしてください。詳細

reCAPTCHA Java ライブラリを使用すると、CAPTCHA を簡単に配置できます。 使用して bot による悪用を阻止できます。ライブラリは、 reCAPTCHA API

Java や JSP で reCAPTCHA を使用するには、reCAPTCHA Java ライブラリをこちら(Soren 提供)にアクセスして解凍してください。通常は jar ファイル(recaptcha4j-X.X.X.jar)を読み込み可能な場所にコピーする必要があります。 確認できます。たとえば、Tomcat を使用して JSP を実行する場合、jar ファイルに WEB-INF/lib/ というディレクトリに配置されます。

クイック スタート

API キーに登録して reCAPTCHA Java ライブラリをダウンロードしたら、以下の基本的な手順を実施します。 reCAPTCHA をサイトにインストールします。

クライアントサイド(CAPTCHA 画像の表示方法)

Java プラグインを使用して reCAPTCHA ウィジェットを表示する場合は、 必要な reCAPTCHA クラスです。JSP では、これらの行を reCAPTCHA ウィジェットが表示されるフォーム要素を指定します。

    <%@ page import="net.tanesha.recaptcha.ReCaptcha" %>
    <%@ page import="net.tanesha.recaptcha.ReCaptchaFactory" %>

次に、reCAPTCHA のインスタンスを作成します。

    ReCaptcha c = ReCaptchaFactory.newReCaptcha("your_public_key", "your_private_key", false);

最後に、reCAPTCHA ウィジェットを表示するための HTML は、以下から取得できます。 関数呼び出し:

    c.createRecaptchaHtml(null, null)

そのため、JSP のコードは次のようになります。

    <%@ page import="net.tanesha.recaptcha.ReCaptcha" %>
    <%@ page import="net.tanesha.recaptcha.ReCaptchaFactory" %>

    <html>
      <body>
        <form action="" method="post">
        <%
          ReCaptcha c = ReCaptchaFactory.newReCaptcha("your_public_key", "your_private_key", false);
          out.print(c.createRecaptchaHtml(null, null));
        %>
        <input type="submit" value="submit" />
        </form>
      </body>
    </html>

your_public_keyyour_private_key は、必ず次のように置き換えます。 確認します。

サーバーサイド(ユーザーが正しい回答を入力したかどうかをテストする方法)

フォームを検証するアプリケーションで、まず必要な reCAPTCHA クラス:

    import net.tanesha.recaptcha.ReCaptchaImpl;
    import net.tanesha.recaptcha.ReCaptchaResponse;

次に、ユーザーが入力した reCAPTCHA ソリューションを検証するコードを挿入する必要があります。 以下の(JSP の例)は、これを行う方法を示しています。

    <%@ page import="net.tanesha.recaptcha.ReCaptchaImpl" %>
    <%@ page import="net.tanesha.recaptcha.ReCaptchaResponse" %>

    <html>
      <body>
      <%
        String remoteAddr = request.getRemoteAddr();
        ReCaptchaImpl reCaptcha = new ReCaptchaImpl();
        reCaptcha.setPrivateKey("your_private_key");
String challenge = request.getParameter("recaptcha_challenge_field"); String uresponse = request.getParameter("recaptcha_response_field"); ReCaptchaResponse reCaptchaResponse = reCaptcha.checkAnswer(remoteAddr, challenge, uresponse); if (reCaptchaResponse.isValid()) { out.print("Answer was entered correctly!"); } else { out.print("Answer is wrong"); } %> </body> </html>

上記のコードでは、次のようになります。

  • remoteAddr は、reCAPTCHA に渡されるユーザーの IP アドレスです。 サーバー)
  • uresponse には、reCAPTCHA による確認に対するユーザーの回答が含まれています。
  • 重要: DNS キャッシュ

    Java に問題があるため、サーバーと reCAPTCHA 間の接続が引き起こされる可能性があります。 中断され、その時点から reCAPTCHA がサイトで機能しなくなります。 説明します。この問題の解決方法については、以下をご覧ください。

    デフォルトでは、Java 仮想マシン(JVM)はすべての DNS ルックアップを永久にキャッシュに保存します。 各ホストの DNS レコードで指定された有効期間(TTL)値。対象: DNS ルックアップとは DNS サーバーに 送信されたリクエストで IP アドレスに変換できます。たとえば、www.recaptcha.net が IP アドレス 69.12.97.164もちろんこれよりもはるかに複雑です。 詳細については、Wikipedia のエントリ DNS から始めることをおすすめします。

    reCAPTCHA サーバーによって IP アドレスが変更される可能性はあります。Java は DNS をキャッシュに保存するため ルックアップが永遠に続くと、サーバーと reCAPTCHA 間の接続が停止する可能性があります。 ユーザーに表示されます。このような場合は、JVM を再起動(例: Tomcat など)を使用すると、新しい DNS ルックアップが発生するため、問題を解決できます。しかし、多くの場合、 reCAPTCHA が組み込まれているため、サイトが中断するたびに、数か月に 1 回 JVM を再起動したいと考えています。 サーバーによって変更された IP アドレスです。

    この問題を完全に解決するには、-Dsun.net.inetaddr.ttl=30 を app-server(これにより、DNS を 30 秒間だけキャッシュするように Java に指示します)。Windows 用の Tomcat では、 行う

    1. Tomcat を停止する
    2. Tomcat\bin に移動します。
    3. Tomcat5w.exe を実行する
    4. [Java] タブに移動
    5. Java プロパティを Java オプション セクションに追加: -Dsun.net.inetaddr.ttl=30
    6. 終了
    7. Tomcat を起動する

    Linux または MacOS X 用の Tomcat では、コマンドラインで (その後、Tomcat を再起動します)。

        export JAVA_OPTS="$JAVA_OPTS -Dsun.net.inetaddr.ttl=30"

    こちらの記事をご覧ください この問題の詳細を説明しているはずです。

    関連情報

  • デザインのカスタマイズ
  • ヒントとガイドライン
  • トラブルシューティング