重要: 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_key
と your_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 では、 行う
- Tomcat を停止する
- Tomcat\bin に移動します。
- Tomcat5w.exe を実行する
- [Java] タブに移動
- Java プロパティを Java オプション セクションに追加: -Dsun.net.inetaddr.ttl=30
- 終了
- Tomcat を起動する
Linux または MacOS X 用の Tomcat では、コマンドラインで (その後、Tomcat を再起動します)。
export JAVA_OPTS="$JAVA_OPTS -Dsun.net.inetaddr.ttl=30"
こちらの記事をご覧ください この問題の詳細を説明しているはずです。