codestory

Verwenden Sie Google reCAPTCHA in der Java-Webanwendung

  1. Was ist reCAPTCHA?
  2. Demo vorschauen
  3. Google reCAPTCHA registrieren
  4. Das Projekt erstellen um das Beispiel zu machen
  5. Code Project
  6. Das Projekt konfigurieren und laufen

1. Was ist reCAPTCHA?

CAPTCHA ist ein Authentifizierung Tool auf die Webseite um sicherzustellen, dass Ihre Webseite durch ein automatisches Tool SPAM nicht gemacht wird. Nach der Tradition ist captcha ein Bild mit der Buchstaben, die einem automatischen Programm schwierig ist zu analysieren. Der Benutzer soll die Buchstabe so gleich wie auf dem Bild eingeben zu guarantieren, dass er kein Robot ist. das tradionelle CAPTCHA kann die Bedürfnisse befriedigen aber es ist manchmal kompliziert, dass die Buchstaben CAPTCHA dem Benutzer so schwierig sind zu lesen.
Die Image von einem traditionellen CAPTCHA
reCAPTCHA ist eine umsonste CAPTCHA Dienstleistung, die hilft Ihrer Webseite bei dem Kampf gegen SPAM, die giftigen Anmeldung oder die anderen Attacke, wo die Attackenprogramme sich selbst verstecken um die Aktivitäten wie von der Menschen zu initieren. reCAPTCHA mit der einfachen Interface, die Sie in Ihrer Blog, Forum oder Webseite einfach einfügen...
Die folgende Image bezeichnet den Grundsatz der Operation von reCAPTCHA:
  • Auf die Form der Dateneingabe gibt es Google reCAPTCHA.
  • Wenn der Benutzer auf "I'm not a robot" klickt, wird ein Ajax request automatisch zur Dienstleistung Google reCAPTCHA geschickt und erhalt eine Bestätigungscode, die in einen Hidden field (g-recaptcha-response) von der Form archiviert wird. Was der Benutzer machen muss ist nur auf "I'm not a robot" klicken, statt die von dem traditionellen CAPTCHA erstellten komplizierten Buchstaben lesen.
  • der Benutzer klickt die Button Submit form, dann behandelt Server die geschickten Daten. Hier erstellt das Programm eine Anforderung (request) mit der oben gemeinten Bestätigungscode um zur Dienstleistung Google reCAPTCHA für die Überprüfung der Code zu schicken. Die Dienstleistung Google reCAPTCHA wird dann das Bestätigungsergebnis schicken

2. Demo vorschauen

3. Google reCAPTCHA registrieren

Zuerst sollen Sie Google reCAPTCHA registrieren
Nach der Registrierung schaffen Sie Site-Key & Secret-Key
  • Site Key: 6LelZAsTAAAAAAv1ADYDnq8AzbmPmbMvjh-xhfgB
  • Secret Key: 6LelZAsTAAAAAKa_s6g2yuJzByYlk0FH_6iTkZJC

4. Das Projekt erstellen um das Beispiel zu machen

  • File/New/Other..
Geben Sie ein
  • Group Id: org.o7planning
  • Artifact Id: reCaptchaDemo
  • package: org.o7planning.tutorial.recaptcha
Das Project wird erstellt
Maven erstellt webapp project, das an einiger Komponenten mangeln können. Sie sollen sie korrigieren
Die Konfiguration web.xml benutzt WebApp 3.0 statt WebApp 2.3, das von Maven automatisch erstellt wird
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    version="3.0">

 
  <display-name>Archetype Created Web Application</display-name>
 
</web-app>
Die Konfiguration von Maven:
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
                       http://maven.apache.org/maven-v4_0_0.xsd">
                       
   <modelVersion>4.0.0</modelVersion>
   <groupId>org.o7planning</groupId>
   <artifactId>reCaptchaDemo</artifactId>
   <packaging>war</packaging>
   <version>0.0.1-SNAPSHOT</version>
   <name>reCaptchaDemo Maven Webapp</name>
   <url>http://maven.apache.org</url>


   <dependencies>
       <dependency>
           <groupId>junit</groupId>
           <artifactId>junit</artifactId>
           <version>3.8.1</version>
           <scope>test</scope>
       </dependency>

       <!-- Servlet Library -->
       <!-- http://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
       <dependency>
           <groupId>javax.servlet</groupId>
           <artifactId>javax.servlet-api</artifactId>
           <version>3.1.0</version>
           <scope>provided</scope>
       </dependency>


       <!-- JSON Library -->
       <!-- http://mvnrepository.com/artifact/org.glassfish/javax.json -->
       <dependency>
           <groupId>org.glassfish</groupId>
           <artifactId>javax.json</artifactId>
           <version>1.0.4</version>
       </dependency>

   </dependencies>


 <build>
       <finalName>reCaptchaDemo</finalName>
       <plugins>
       
           <!-- Config: Maven Tomcat Plugin -->
           <!-- http://mvnrepository.com/artifact/org.apache.tomcat.maven/tomcat7-maven-plugin -->
           <plugin>
               <groupId>org.apache.tomcat.maven</groupId>
               <artifactId>tomcat7-maven-plugin</artifactId>
               <version>2.2</version>
               <!-- Config: contextPath and Port (Default - /reCaptchaDemo : 8080) -->
               <!--
               <configuration>
                   <path>/</path>
                   <port>8899</port>
               </configuration>
               -->    
           </plugin>
       </plugins>
   </build>

</project>
Ihr Project warnt kein Fehler mehr.

5. Code Project

Das ist das Project nach der Erledigung
MyConstants.java
package org.o7planning.tutorial.recaptcha;

public class MyConstants {

   
   public static final String SITE_KEY ="6LelZAsTAAAAAAv1ADYDnq8AzbmPmbMvjh-xhfgB";
   
   public static final String SECRET_KEY ="6LelZAsTAAAAAKa_s6g2yuJzByYlk0FH_6iTkZJC";
   
}
VerifyUtils.java
package org.o7planning.tutorial.recaptcha;

import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;

import javax.json.Json;
import javax.json.JsonObject;
import javax.json.JsonReader;
import javax.net.ssl.HttpsURLConnection;

public class VerifyUtils {

	public static final String SITE_VERIFY_URL = //
			"https://www.google.com/recaptcha/api/siteverify";

	public static boolean verify(String gRecaptchaResponse) {
		if (gRecaptchaResponse == null || gRecaptchaResponse.length() == 0) {
			return false;
		}

		try {
			URL verifyUrl = new URL(SITE_VERIFY_URL);

			// Eine Verbindung (Connection) nach der oben URL öffnen
			HttpsURLConnection conn = (HttpsURLConnection) verifyUrl.openConnection();

			// Die Information Header in Request nach dem Server einfügen.
			conn.setRequestMethod("POST");
			conn.setRequestProperty("User-Agent", "Mozilla/5.0");
			conn.setRequestProperty("Accept-Language", "en-US,en;q=0.5");

			// Die Daten wird nach dem Server schicken.
			String postParams = "secret=" + MyConstants.SECRET_KEY //
					+ "&response=" + gRecaptchaResponse;

			// Send Request
			conn.setDoOutput(true);

			// Das Output Stream der Verbidnung nach dem Server nehmen.
			// Die Daten ins Output Stream aufschreiben, d.h die Information nach dem Server schicken.
			OutputStream outStream = conn.getOutputStream();
			outStream.write(postParams.getBytes());

			outStream.flush();
			outStream.close();

			// Die Code wird vom Server zurückgegeben.
			int responseCode = conn.getResponseCode();
			System.out.println("responseCode=" + responseCode);

			// Das Input Stream von der Connection nehmen um die vom Server geschickten Daten vom Server zu lesen 
			InputStream is = conn.getInputStream();

			JsonReader jsonReader = Json.createReader(is);
			JsonObject jsonObject = jsonReader.readObject();
			jsonReader.close();

			// ==> {"success": true}
			System.out.println("Response: " + jsonObject);

			boolean success = jsonObject.getBoolean("success");
			return success;
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}
	}
}
LoginServlet.java
package org.o7planning.tutorial.recaptcha.servlet;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(urlPatterns = "/login")
public class LoginServlet extends HttpServlet {

  private static final long serialVersionUID = 958900029856081978L;

  @Override
  protected void doGet(HttpServletRequest req, HttpServletResponse resp)
          throws ServletException, IOException {
     
      RequestDispatcher dispatcher =
              req.getServletContext().getRequestDispatcher("/WEB-INF/views/loginView.jsp");
     
      dispatcher.forward(req, resp);

  }

  @Override
  protected void doPost(HttpServletRequest req, HttpServletResponse resp)
          throws ServletException, IOException {
      this.doGet(req, resp);
  }

}
DoLoginServlet.java
package org.o7planning.tutorial.recaptcha.servlet;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
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 org.o7planning.tutorial.recaptcha.VerifyUtils;

@WebServlet(urlPatterns = "/doLogin")
public class DoLoginServlet extends HttpServlet {

 private static final long serialVersionUID = 958900029856081978L;

 @Override
 protected void doGet(HttpServletRequest request, HttpServletResponse response)
         throws ServletException, IOException {

     String userName = request.getParameter("userName");
     String password = request.getParameter("password");

     boolean valid = true;
     String errorString = null;

     // Check userName & password
     if (!"tom".equals(userName) || !"tom001".equals(password)) {
         valid = false;
         errorString = "UserName or Password invalid!";
     }

     if (valid) {

         String gRecaptchaResponse = request.getParameter("g-recaptcha-response");

         System.out.println("gRecaptchaResponse=" + gRecaptchaResponse);

         // Verify CAPTCHA.
         valid = VerifyUtils.verify(gRecaptchaResponse);
         if (!valid) {
             errorString = "Captcha invalid!";
         }
     }
     if (!valid) {
         request.setAttribute("errorString", errorString);
         RequestDispatcher dispatcher = //
                     request.getServletContext().getRequestDispatcher("/WEB-INF/views/loginView.jsp");
       
         dispatcher.forward(request, response);
         return;
     } else {
         request.getSession().setAttribute("loginedUser", userName);
         // Redirect to /userInfo
         response.sendRedirect(request.getContextPath()+"/userInfo");
     }
 }

 @Override
 protected void doPost(HttpServletRequest req, HttpServletResponse resp)
                                           throws ServletException, IOException {
     this.doGet(req, resp);
 }

}
UserInfoServlet.java
package org.o7planning.tutorial.recaptcha.servlet;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(urlPatterns = "/userInfo")
public class UserInfoServlet extends HttpServlet {

	private static final long serialVersionUID = 958900029856081978L;

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) //
			throws ServletException, IOException {

		if (req.getSession().getAttribute("loginedUser") == null) {
			resp.sendRedirect(req.getContextPath() + "/login");
			return;
		}

		RequestDispatcher dispatcher //
				= req.getServletContext().getRequestDispatcher("/WEB-INF/views/userInfoView.jsp");

		dispatcher.forward(req, resp);

	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) //
			throws ServletException, IOException {

		this.doGet(req, resp);

	}

}
Um reCAPTCHA auf die JSP Seite zu benutzen, brauchen Sie die Bibliothek javascript anzumelden. Beachten Sie, reCAPTCHA 40 Sprache des Benutzer unterstützen. Sie können eine bestimmte Sprache auf reCAPTCHA konfigurieren oder standardmäßig setzen. Im Fall von dem Default wird reCAPTCHA die Sprache nach der geografischen Lage des Benutzer anzeigen (nach der IP Addresse)
<!-- reCAPTCHA with English language -->
<script src='https://www.google.com/recaptcha/api.js?hl=en'></script>


<!-- reCAPTCHA with Vietnamese language -->
<script src='https://www.google.com/recaptcha/api.js?hl=vi'></script>


<!-- reCAPTCHA with Auto language -->
<script src='https://www.google.com/recaptcha/api.js'></script>
/WEB-INF/views/loginView.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
  pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Login</title>

<!-- reCAPTCHA Libary -->
<script src='https://www.google.com/recaptcha/api.js?hl=en'></script>

</head>
<body>

 <h3>Login:</h3>
 
 <p style="color:red;">${errorString}</p>

  <form name="loginForm" method="POST" action="doLogin">
      <table border="0">
          <tr>
              <td>User Name</td>
              <td><input type="text" name="userName" /></td>
          </tr>
          <tr>
              <td>Password</td>
              <td><input type="password" name="password" /></td>
          </tr>
      </table>
     
      <!-- reCAPTCHA -->
      <div class="g-recaptcha"
          data-sitekey="6LelZAsTAAAAAAv1ADYDnq8AzbmPmbMvjh-xhfgB"></div>

      <input type="submit" value="Submit" />

  </form>
  <p style="color:blue;">User Name: tom, Password: tom001</p>

</body>
</html>
/WEB-INF/views/userInfoView.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
  pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>User Info</title>


</head>
<body>

 Hello ${loginedUser}

</body>
</html>

6. Das Projekt konfigurieren und laufen

Geben Sie ein
  • Name: Run reCaptchaDemo
  • Base directory: ${workspace_loc:/reCaptchaDemo}
  • Goals: tomcat7:run
Sie können die URL durchführen

Anleitungen Java Servlet/JSP

Show More