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
- JDK 1.6.0_07 – http://java.sun.com
- Eclipse 3.4 IDE dành cho lập trình viên Java EE – http://www.eclipse.org/downloads/
- Tomcat 6.0.14 – http://jakarta.apache.org/tomcat
- JACOB – Java COM Bridge – http://sourceforge.net/projects/jacob-project
- BotDetect 2.0 CAPTCHA – dùng thử miễn phí BotDetect CAPTCHA
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"
Trong "Project name", gõ "captchaWeb", chọn "Apache Tomcat v6.0" trong "Target Runtime" và click "Finish".
Tại dấu đợi lệnh click "Yes" để chuyển sang Java EE
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".
click phải trên gói mới và chọn "New\Class". Trong trường "Name" gõ "CaptchaServlet" và click "Finish".
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..."
Trên màn hình tiếp theo chọn "User Library" và click "Next".
Click "User Libraries".
Click "New".
Gõ "jacob" cho "User library name" và Nhấn "OK".
Click "Add jars", tìm tới thư mục "Jacob" và chọn "jacob.jar".
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".
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".
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".
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".
chọn "Tomcat v6.0 Server" và click "Next".
Trên mục "Add và Remove Projects", chọn "captchaWeb" và click "Add", rồi "Finish".
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".
Khởi động lại máy chủ, mở trình duyệt và gõ URL http://localhost:8080/captchaWeb/index.htm.
Nếu bạn nhập đúng giá trị, bạn sẽ được chuyển tới success.htm
Ngược lại, bạn sẽ được chuyển tới failure.htm
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".
Trong Eclipse, tìm tới "Window\Preferences" và "Java\Installed JREs" để chọn JRE.
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..."
chọn "Apache Tomcat v6.0" và click "Next".
Click "Browse" để tìm tới thư mục Tomcat và click "Finish" và "OK".
Phiên bản hiện tại của BotDetect
- BotDetect ASP.NET CAPTCHA v2.0.152009–11–23
- BotDetect ASP CAPTCHA v2.0.92009–02–12
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.































