Hướng dẫn sử dụng BotDetect CAPTCHA để bảo vệ trang Java

Lưu ý quan trọng

Vì ví dụ mẫu này sử dụng phiên bản BotDetect CAPTCHA được hiện thực dưới dạng COM component, cả máy chủ và máy lập trình của bạn phải sử dụng hệ điều hành họ Windows. Hiện tại, chúng tôi chưa hỗ trợ trang Java chạy trên các hệ điều hành khác.

Yêu cầu hệ thống

Các phiên bản khác cũng có thể dùng tốt nhưng chúng tôi đã sử dụng các phiên bản trên trong ví dụ này. Giải nén và cài đặt vào thư mục tuỳ chọn.

Tạo dự án CAPTCHA mới dùng Java

Tạo mới dự án web động bằng cách click "File\New\Project"

Hướng dẫn sử dụng BotDetect CAPTCHA để bảo vệ trang Java: hình 6

Trong "Project name", gõ "captchaWeb", chọn "Apache Tomcat v6.0" trong "Target Runtime" và click "Finish".

Hướng dẫn sử dụng BotDetect CAPTCHA để bảo vệ trang Java: hình 7

Tại dấu đợi lệnh click "Yes" để chuyển sang Java EE

Hướng dẫn sử dụng BotDetect CAPTCHA để bảo vệ trang Java: hình 8

Trong Project Explorer tìm tới "Java Resources: src", click phải vào nó và chọn "New\Package". Trong trường "Name", gõ "org.lanapsoft.captcha" và click "Finish".

Hướng dẫn sử dụng BotDetect CAPTCHA để bảo vệ trang Java: hình 9

click phải trên gói mới và chọn "New\Class". Trong trường "Name" gõ "CaptchaServlet" và click "Finish".

Hướng dẫn sử dụng BotDetect CAPTCHA để bảo vệ trang Java: hình 10

Cắt dán doạn mã sau:

package org.lanapsoft.captcha;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.SafeArray;
import com.jacob.com.Variant;

public class CaptchaServlet extends HttpServlet {

  public void service(HttpServletRequest request, HttpServletResponse 
    response) throws ServletException, IOException {
		
    ActiveXComponent activeXComponent = null;
		
    String command = null;
    String[] params = null;
    String queryString = (String) request.getQueryString();

    if (queryString != null) {
      params = queryString.split("=");
      command = params[0];
    }

    HttpSession session = request.getSession(true);
    activeXComponent = (ActiveXComponent) 
      session.getAttribute("captchaComponent");
		
    if (activeXComponent == null) {
      activeXComponent = new ActiveXComponent("Lanap.BotDetect");
      session.setAttribute("captchaComponent", activeXComponent);
    }

    if ("CreateImage".equals(command)) {
      activeXComponent.setProperty("CodeLength", 5);
      activeXComponent.setProperty("Format", "Jpeg");
      activeXComponent.setProperty("ImageWidth", 300);
      activeXComponent.setProperty("ImageHeight", 100);

      Variant createImage = activeXComponent.invoke("CreateImage");

      SafeArray createImageSafeArray = createImage.toSafeArray();
      byte createImageByteArray[] = createImageSafeArray.toByteArray();
			
      Variant generatedValue = activeXComponent.invoke("GetValue");
      session.setAttribute("generatedValue", generatedValue);
			
      Variant generatedHashValue = 
        activeXComponent.invoke("GetHashValue");
      session.setAttribute("generatedHashValue", generatedHashValue);

      ServletOutputStream servletOutputStream = response
        .getOutputStream();
      servletOutputStream.write(createImageByteArray);
      servletOutputStream.flush();
      servletOutputStream.close();
			
    } else if ("CreateSound".equals(command)) {
      Variant generatedValue = 
        (Variant)session.getAttribute("generatedValue");
      Variant createSound = 
        activeXComponent.invoke("CreateSoundFromCode", 
          generatedValue);

      SafeArray createImageSafeArray = createSound.toSafeArray();
      byte createImageByteArray[] = createImageSafeArray.toByteArray();

      ServletOutputStream servletOutputStream = response
        .getOutputStream();
      servletOutputStream.write(createImageByteArray);
      servletOutputStream.flush();
      servletOutputStream.close();
			
    } else if ("userCode".equals(command)) {
      String userCodeParam = params[1];

      Variant userCode = new Variant();
      userCode.putString(userCodeParam);

      Variant generatedHashValue = (Variant)
        session.getAttribute("generatedHashValue");
      Variant validate = activeXComponent.invoke("Validate", userCode, 
        generatedHashValue);

      boolean success = validate.getBoolean();

      if (success) {
        response.sendRedirect("/captchaWeb/success.htm");
      } else {
        response.sendRedirect("/captchaWeb/failure.htm");
      }
    }
  }
}

Để loại bỏ lỗi biên dịch, click phải vào dự án và chọn "Properties". Chọn "Java Build Path" và click trên "Add Library..."

Hướng dẫn sử dụng BotDetect CAPTCHA để bảo vệ trang Java: hình 11

Trên màn hình tiếp theo chọn "User Library" và click "Next".

Hướng dẫn sử dụng BotDetect CAPTCHA để bảo vệ trang Java: hình 12

Click "User Libraries".

Hướng dẫn sử dụng BotDetect CAPTCHA để bảo vệ trang Java: hình 13

Click "New".

Hướng dẫn sử dụng BotDetect CAPTCHA để bảo vệ trang Java: hình 14

Gõ "jacob" cho "User library name" và Nhấn "OK".

Hướng dẫn sử dụng BotDetect CAPTCHA để bảo vệ trang Java: hình 15

Click "Add jars", tìm tới thư mục "Jacob" và chọn "jacob.jar".

Hướng dẫn sử dụng BotDetect CAPTCHA để bảo vệ trang Java: hình 16

Click "OK", "Finish" và "OK". Sẽ không có lỗi nào trong dự án.

Trong Project Explorer, tìm tới "WebContent\WEB-INF", mở "web.xml" và chuyển qua tab "Source".

Hướng dẫn sử dụng BotDetect CAPTCHA để bảo vệ trang Java: hình 17

Cắt dán đoạn mã sau:

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4" 
  xmlns="http://java.sun.com/xml/ns/j2ee" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  <display-name>captchaWeb</display-name>
  <welcome-file-list>
    <welcome-file>index.htm</welcome-file>
  </welcome-file-list>

  <servlet>
    <servlet-name>captchaWeb</servlet-name>
    <servlet-class>org.lanapsoft.captcha.CaptchaServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>captchaWeb</servlet-name>
    <url-pattern>/captcha/*</url-pattern>
  </servlet-mapping>
</web-app>

Trong Project Explorer, click phải vào "WebContent" và chọn "New\File". Gõ vào "index.htm" và click "Finish".

Hướng dẫn sử dụng BotDetect CAPTCHA để bảo vệ trang Java: hình 18

Lặp lại các bước và tạo file "success.htm" và "failure.htm".

Cắt dán đoạn mã sau:

index.htm

<html>
<body>
  <form name="searchForm" method="get" action="/captchaWeb/captcha">
    <table>
      <tr>
        <td>
          <img src="/captchaWeb/captcha?CreateImage" />
        </td>
      </tr>
      <tr>
        <td>
          <b>Sound:</b>
          <a href="/captchaWeb/captcha?CreateSound">
            <img src="speaker.gif" alt="Speak the code" />
          </a>
        </td>
      </tr>
      <tr>
        <td colspan="2" align="right">
          <input type="text" name="userCode" />
        </td>
      </tr>
      <tr>
        <td colspan="2" align="right">
          <input type="submit" value="Submit" />
        </td>
      </tr>
    </table>
  </form>
</body>
</html>

success.htm

<html>
  <h1>success</h1>
</html>

failiure.htm

<html>
  <h1>failure</h1>
</html>

Tìm tới "WebContent\WEB-INF\lib" trong Project Explorer và dán file "jacob-1.14.3-x86.dll".

click phải trên dự án "captchaWeb", chọn "Properties", và "Java EE Module Dependencies" và check thư viện "jacob". Nhấn "OK".

Hướng dẫn sử dụng BotDetect CAPTCHA để bảo vệ trang Java: hình 19

Tìm tới "Window\Show View" và chọn "Servers". Trong màn hình "Servers", click phải và chọn "New\Server".

Hướng dẫn sử dụng BotDetect CAPTCHA để bảo vệ trang Java: hình 20

chọn "Tomcat v6.0 Server" và click "Next".

Hướng dẫn sử dụng BotDetect CAPTCHA để bảo vệ trang Java: hình 21

Trên mục "Add và Remove Projects", chọn "captchaWeb" và click "Add", rồi "Finish".

Hướng dẫn sử dụng BotDetect CAPTCHA để bảo vệ trang Java: hình 22

Trong "Servers", click phải trên máy chủ, chọn "Start". Tìm tới "Run\Run Configurations", chọn "Tomcat v6.0 Server at localhost" và trên tab "Arguments", thêm VM argument -Djava.library.path=“location_of_your_workspace\ captchaWeb\WebContent\WEB-INF\lib". Click "Apply" và "Close".

Hướng dẫn sử dụng BotDetect CAPTCHA để bảo vệ trang Java: hình 23

Khởi động lại máy chủ, mở trình duyệt và gõ URL http://localhost:8080/captchaWeb/index.htm.

Hướng dẫn sử dụng BotDetect CAPTCHA để bảo vệ trang Java: hình 24

Nếu bạn nhập đúng giá trị, bạn sẽ được chuyển tới success.htm

Hướng dẫn sử dụng BotDetect CAPTCHA để bảo vệ trang Java: hình 25

Ngược lại, bạn sẽ được chuyển tới failure.htm

Hướng dẫn sử dụng BotDetect CAPTCHA để bảo vệ trang Java: hình 26

Thiết lập môi trường Java

Nếu bạn không có Java EE Developer Tools được cài đặt trong Eclipse, tìm tới Help\Software Updates... trong tab "Available Software" chọn "Java EE Developer Tools" và click "Install".

Hướng dẫn sử dụng BotDetect CAPTCHA để bảo vệ trang Java: hình 1

Trong Eclipse, tìm tới "Window\Preferences" và "Java\Installed JREs" để chọn JRE.

Hướng dẫn sử dụng BotDetect CAPTCHA để bảo vệ trang Java: hình 2

Nếu chưa có JRE, click "Add..." và tìm tới thư mục của nó.

Dưới "Server\Runtime Environments" click "Add..."

Hướng dẫn sử dụng BotDetect CAPTCHA để bảo vệ trang Java: hình 3

chọn "Apache Tomcat v6.0" và click "Next".

Hướng dẫn sử dụng BotDetect CAPTCHA để bảo vệ trang Java: hình 4

Click "Browse" để tìm tới thư mục Tomcat và click "Finish" và "OK".

Hướng dẫn sử dụng BotDetect CAPTCHA để bảo vệ trang Java: hình 5

Phiên bản hiện tại của BotDetect

Xin lưu ý

Trang này là bản dịch tiếng Việt không chính thức của trang gốc tiếng Anh: How To add BotDetect CAPTCHA protection to Java forms và có thể không chính xác, không đầy đủ hoặc không cập nhật.

Cập nhật ngày 2009-11-30. Áp dụng cho BotDetect ASP.NET CAPTCHA v2.0.15 và BotDetect ASP CAPTCHA v2.0.9.

language: English Español Tiếng Việt