OS...Windows 10 IDE...Eclipse 2020-3 Java...Open JDK 14 Servlet-Container ... Apache Tomcat 9.0.33
Greifen Sie zunächst auf die reCAPTCHA-Site zu. reCAPTCHA
Erstellen Sie mit der Schaltfläche +.
Geben Sie die Informationen Ihrer Site ein.
Geben Sie einen beschreibenden Namen für das Etikett ein.
Für den Typ reCAPTCHA möchte ich "Ich bin kein Roboter" ausführen, daher habe ich mich für reCAPTCHA v2 entschieden. Dann wird das Kontrollkästchen "Ich bin kein Roboter" angezeigt. Stellen Sie daher sicher, dass es aktiviert ist.
Geben Sie für die Domäne die Domäne ein, für die "Ich bin kein Roboter" festgelegt ist. Wenn Sie die Top-Domain registrieren, können Sie sie in Subdomains verwenden. Wenn Sie es in der Entwicklungsumgebung verwenden möchten, registrieren Sie auch "localhost".
Der Besitzer ... nun, Sie können tun, was Sie wollen.
Akzeptieren Sie abschließend die reCAPTCHA-Nutzungsbedingungen, wählen Sie aus, ob die Warnung an den Eigentümer gesendet werden soll, und klicken Sie auf Senden
Auf dem nächsten Bildschirm werden zwei Zeichenfolgen angezeigt. Notieren Sie sich daher beide.
Stellen Sie diesmal "RecaptchaTest" ein. (Wenn Sie es bereits gemacht haben, verwenden Sie es.)
Erstellen wir eine neue HTML-Datei im WebContent des in Eclipse erstellten Projekts.
Oder Sie können es mit einem externen Editor erstellen und in Ihr Projekt einfügen.
Normalerweise schreibe ich keinen solchen verdammten Code, aber diesmal ist es ein Beispiel. .. ..
<!doctype html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>Probe von reCAPTCHA</title>
<script src="https://www.google.com/recaptcha/api.js" async defer></script>
</head>
<body>
<form action="login" method="post">
ID:<input type="text" name="id"><br>
Passwort:<input type="password" name="current-password">
<div class="g-recaptcha" data-sitekey="[Geben Sie die Zeichenfolge in das Feld über den beiden zuvor angezeigten Zeichenfolgen ein.]"></div>
<input type="submit" value="Einloggen">
</form>
</body>
</html>
Das Wichtigste ist, das Skript des Kopfes und in der Form zu lesen
<div class="g-recaptcha" data-sitekey="[Diejenige, die in das Feld oben geschrieben wurde, das zuvor angezeigt wurde]">
Stellen.
Der Typ "Ich bin kein Roboter" wird angezeigt, wo Sie diesen Div platzieren.
Nachdem Sie den obigen HTML-Code ausgefüllt haben, versuchen wir, ihn auf dem Server auszuführen. Wenn es wie auf dem Bild unten aussieht, ist es okay! !!
Erstellen wir eine Klasse (ein Modell), die Googles reCAPTCHA nach Ergebnissen abfragt.
Der Mechanismus ist einfach: Geben Sie die angegebenen Parameter in die festgelegte URL POST ein, und der JSON wird in der Antwort zurückgegeben.
Lassen Sie uns SECRET_KEY im folgenden Code in die Zeichenfolge ändern, die wir ~~~ erhalten haben
package com.sakurai_shinya.recaptcha;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import javax.net.ssl.HttpsURLConnection;
public class RecaptchaAuthenticator {
private static final String URL = "https://www.google.com/recaptcha/api/siteverify";
private static final String SECRET_KEY = "[Die Zeichenfolge, die sich im Feld unten befand]";
public static boolean checkRecaptcha(String userToken) throws IOException {
String recaptchaResponse = post(new URL(URL), "secret=" + SECRET_KEY + "&response=" + userToken);
return recaptchaResponse.contains("\"success\": true,");
}
private static String post(URL url, String parameters) throws IOException {
HttpsURLConnection con = (HttpsURLConnection) url.openConnection();
con.setDoOutput(true);
try (DataOutputStream dos = new DataOutputStream(con.getOutputStream())) {
dos.writeBytes(parameters);
dos.flush();
}
if (con.getResponseCode() != 200) {
throw new IOException("Bei der Kommunikation mit dem Server ist ein Fehler aufgetreten.");
}
StringBuilder sb = new StringBuilder();
try (BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()))) {
String tempStr;
while ((tempStr = in.readLine()) != null) {
sb.append(tempStr);
}
}
return sb.toString();
}
}
Da es problematisch ist, habe ich die Antwort wie folgt erstellt: OK, wenn "" Erfolg ": true," enthalten ist, und NG, wenn es nicht enthalten ist. Wenn Sie es richtig machen, sollten Sie ein Objekt richtig machen und es analysieren.
Ich werde den gesamten Servlet-Code darauf setzen, aber nur bei POST. Oder besser gesagt, schauen Sie sich einfach POST an
package com.sakurai_shinya.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.sakurai_shinya.recaptcha.RecaptchaAuthenticator;
@WebServlet("/login")
public class Login extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html");
super.service(request, response);
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
response.sendRedirect("login.html");
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
boolean recaptchaResult = false;
try {
recaptchaResult = RecaptchaAuthenticator.checkRecaptcha(request.getParameter("g-recaptcha-response"));
} catch (IOException e) {
response.getWriter().append("Bei der Kommunikation mit dem reCAPTCHA-Authentifizierungsserver ist ein Fehler aufgetreten." + e.toString());
}
if (recaptchaResult) {//reCAPTCHA Erfolg
//Der Vorgang des Abgleichs der ID und des Passworts hier.
String inputId = request.getParameter("id");
String inputPass = request.getParameter("current-password");
response.getWriter().append("Erfolgreiche reCAPTCHA-Zertifizierung.<br>ID:" + inputId + "<br>Passwort:" + inputPass);
} else {//reCAPTCHA-Fehler
response.getWriter().append("Die ReCAPTCHA-Authentifizierung ist fehlgeschlagen.");
}
}
}
RecaptchaAuthenticator.checkRecaptcha(request.getParameter("g-recaptcha-response"));
Wenn Sie checkRecaptcha der zuvor erstellten Klasse aufrufen, ist das Ergebnis wahr oder falsch, oder es wird eine Ausnahme zurückgegeben. Wenn true, ist reCAPTCHA erfolgreich. Wenn false, schlägt reCAPTCHA fehl und die Ausnahme ist ein Fehler.
Übrigens, wenn Sie den G-Recaptcha-Typen in das Formular einfügen, werden die als G-Recaptcha-Antwort bezeichneten Parameter zusammen mit einer mysteriösen Kraft veröffentlicht. Sie senden dies an den Server von Google, um den Nutzer zu identifizieren ~~~
Probieren wir es aus!
Testen Sie mit und ohne diesen Check!
Wenn Sie dem Typ, der g-recaptcha hat, data-theme = dark hinzufügen, wird es schwarz. Jetzt können Sie es auch auf einer schwarzen Seite kühl platzieren! !!
<div class="g-recaptcha" data-sitekey="6Lfx-eMUAAAAALrP774ZrvQa_AtguQhusF0M2W6s" data-theme="dark"></div>
So ↓
Wenn Sie dem GET-Parameter von api.js hl = en hinzufügen, erfolgt dies in englischer Sprache.
<script src="https://www.google.com/recaptcha/api.js?hl=en" async defer></script>
Im Gegensatz zu Japanisch vermittelt es einen stilvollen Eindruck, der an seltsamen Positionen Linien bricht.
Andere Sprachen stehen übrigens im Handbuch von reCAPTCHA. Language Codes | reCAPTCHA | Google Developers
Recommended Posts