Selbst wenn ich gegoogelt habe, gab es keinen Artikel für Java, und die offizielle Website war etwas schwer zu verstehen, deshalb habe ich sie zusammengefasst.
Registrieren Sie sich zunächst, um den Dienst zu nutzen.
Ich habe reCAPTCHA v3 in das Anfrageformular aufgenommen! ⇒ Siehe "So registrieren Sie reCAPTCHA v3"
Einmal registriert, müssen Sie es nur noch implementieren.
HTML Fügen Sie dem Formular-Tag Folgendes hinzu. Setzen Sie das von JavaScript erhaltene Token auf diesen Wert und senden Sie es ab. Wenn Sie Ajax verwenden, müssen Sie dies nicht schreiben, indem Sie direkt "Token" im Parameter "Request" angeben.
hoge.html
<input type="hidden" name="recaptchaResponse" id="recaptchaResponse">
Fügen Sie dem Skriptleseteil Folgendes hinzu. Stellen Sie reCAPTCHA auf Ihrer Website zur Verfügung. Ersetzen Sie den zum Zeitpunkt der Registrierung erhaltenen Site-Schlüssel durch "(Site-Schlüssel)".
hoge.html
<script src="'https://www.google.com/recaptcha/api.js?render=' +(Site-Schlüssel)"></script>
JavaScript Implementieren Sie die beim Senden des Formulars ausgeführte Funktion wie folgt. Der in Aktion festgelegte Wert (im Folgenden "Kontaktformular") wird in "Antwort von reCAPTCHA" gespeichert. Daher kann er für die Analyse hilfreich sein, wenn Sie festlegen, wo er auf der Site ausgeführt wurde.
hoge.js
$form = $(/*Form bekommen*/);
$button = $(/*Holen Sie sich die Senden-Schaltfläche im Formular*/);
$button.click(function() {
//Für reCAPTCHA v3
grecaptcha.ready(function () {
grecaptcha.execute((Site-Schlüssel), {action: 'contact_form'}).then(function(token) {
$('#recaptcha-response').val(token);
//Der in der Funktion vor der Implementierung von reCAPTCHA beschriebene Prozess wird hier beschrieben.
$form.submit();
});
});
});
Controller Implementieren Sie die POST-Zielmethode wie folgt. Eigentlich sollte der logische Teil auf die Serviceschicht ausgeschnitten werden. Das BOT-Urteil (wenn Aussage Teil) wird im nächsten Modellabschnitt erläutert.
HogeController.java
@RequestMapping(value = "/hoge", method = RequestMethod.POST)
public String hogePost(
@Valid @ModelAttribute("hogeForm") HogeForm hogeForm,
BindingResult bindingResult,
HttpServletRequest request, SitePreference sitePreference, Model model) {
String url = "https://www.google.com/recaptcha/api/siteverify?secret=" +(Geheimer Schlüssel)+ "&response=" + hogeForm.getRecaptchaResponse;
RestTemplate restTemplate = new RestTemplate();
RecaptchaResult result = restTemplate.getForObject(url, RecaptchaResult.class);
log.info("reCAPTCHA result: " + result.toString());
if (result.isSuccess()) {
if ( 0.5 <= result.getScore()) {
//Beschreiben Sie die Verarbeitung, wenn sie nicht als BOT beurteilt wird
} else {
//Beschreiben Sie die Verarbeitung, wenn sie als BOT beurteilt wird
}
} else {
//Beschreiben Sie die Verarbeitung, wenn die Verbindung zu reCAPTCHA nicht hergestellt werden kann
}
}
Model Implementieren Sie ein Modell, das die Antwort der reCAPTCHA-API wie folgt speichert. Ich benutze Lombok, das automatisch Getter und Setter generiert. Weitere Informationen zum Inhalt der Antwort finden Sie unter Offiziell.
Beachten Sie, dass die Eigenschaft "success" den Erfolg / Misserfolg der API-Verbindung angibt, nicht die Beurteilung von BOT. In reCAPTCHA wird anhand seines eigenen Programms beurteilt, ob es sich um einen BOT handelt oder nicht, basierend auf der zurückgegebenen Eigenschaft "score" (0,0 ~ 1,0). Je näher die "Punktzahl" an 1 liegt, desto geringer ist die Wahrscheinlichkeit eines BOT, und je näher sie an 0 liegt, desto höher ist die Wahrscheinlichkeit eines BOT. Google Official Interpreting the Score gibt an, dass der anfängliche Schwellenwert 0,5 betragen sollte.
RecaptchaResult.java
package com.croooober.v1.cr_www.model.api;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class RecaptchaResult {
private boolean success;
private String challenge_ts;
private String hostname;
private float score;
private String action;
public RecaptchaResult() {
}
}
Außerdem wurden dem Formularobjekt Eigenschaften hinzugefügt.
HogeForm.java
private String recaptchaResponse;
Wenn Sie es gut implementieren können, können Sie das Ergebnis mit der Protokollausgabe wie folgt überprüfen.
reCAPTCHA result: RecaptchaResult(success=true, challenge_ts=2020-01-08T04:19:27Z, hostname=hoge.com, score=0.9, action=contact_form)
Zuerst dachte ich, wenn ich es in die API wirf, wird es beurteilen, ob es BOT ist oder nicht. Eigentlich musste ich nach meinem eigenen Programm anhand der Punktzahl urteilen, was etwas verwirrend war.
Recommended Posts