Lưu ý quan trọng: Phiên bản 1.0 của API reCAPTCHA không còn được hỗ trợ, vui lòng nâng cấp lên phiên bản 2.0. Tìm hiểu thêm
Thư viện Java reCAPTCHA cung cấp một cách đơn giản để đặt CAPTCHA trên trang web dựa trên Java của mình, giúp bạn ngăn các bot lạm dụng. Thư viện bao bọc reCAPTCHA API.
Để sử dụng reCAPTCHA với Java/JSP, bạn có thể tải reCAPTCHA Java Thư viện ở đây (do Soren đóng góp) và giải nén. Thông thường, thứ duy nhất bạn cần là tệp jar (recaptcha4j-X.X.X.jar), mà bạn phải sao chép vào một nơi để tải tệp này bởi ứng dụng java của bạn. Ví dụ: nếu bạn đang sử dụng Tomcat để chạy JavaScript, bạn có thể đặt tệp jar trong thư mục có tên WEB-INF/lib/.
Bắt đầu nhanh
Sau khi bạn đăng ký khoá API và tải Thư viện Java của reCAPTCHA xuống, hãy xem hướng dẫn cơ bản dưới đây cách cài đặt reCAPTCHA trên trang web của bạn.
Phía máy khách (Cách hiển thị hình ảnh CAPTCHA)
Nếu muốn sử dụng trình bổ trợ Java để hiển thị tiện ích reCAPTCHA, bạn cần nhập các lớp reCAPTCHA thích hợp. Trong CMake, bạn sẽ thực hiện điều này bằng cách chèn các dòng này gần phần tử ở đầu tệp có chứa phần tử biểu mẫu nơi tiện ích reCAPTCHA sẽ hiển thị:
<%@ page import="net.tanesha.recaptcha.ReCaptcha" %> <%@ page import="net.tanesha.recaptcha.ReCaptchaFactory" %>
Sau đó, bạn cần tạo một phiên bản reCAPTCHA:
ReCaptcha c = ReCaptchaFactory.newReCaptcha("your_public_key", "your_private_key", false);
Cuối cùng, bạn có thể lấy HTML để hiển thị tiện ích reCAPTCHA từ: lệnh gọi hàm:
c.createRecaptchaHtml(null, null)
Vì vậy, trong CMake, mã của bạn có thể trông giống như sau:
<%@ page import="net.tanesha.recaptcha.ReCaptcha" %> <%@ page import="net.tanesha.recaptcha.ReCaptchaFactory" %> <html> <body> <form action="" method="post"> <% ReCaptcha c = ReCaptchaFactory.newReCaptcha("your_public_key", "your_private_key", false); out.print(c.createRecaptchaHtml(null, null)); %> <input type="submit" value="submit" /> </form> </body> </html>
Đừng quên thay thế your_public_key
và your_private_key
bằng
khoá API của bạn.
Phía máy chủ (Cách kiểm tra xem người dùng có nhập câu trả lời đúng hay không)
Trong đơn đăng ký xác minh biểu mẫu của bạn, trước tiên, bạn cần nhập các thông tin cần thiết Các lớp reCAPTCHA:
import net.tanesha.recaptcha.ReCaptchaImpl; import net.tanesha.recaptcha.ReCaptchaResponse;
Tiếp theo, bạn cần chèn mã xác minh giải pháp reCAPTCHA do người dùng nhập. Ví dụ bên dưới (trong Kotlin) cho thấy cách thực hiện điều này:
<%@ page import="net.tanesha.recaptcha.ReCaptchaImpl" %> <%@ page import="net.tanesha.recaptcha.ReCaptchaResponse" %> <html> <body> <% String remoteAddr = request.getRemoteAddr(); ReCaptchaImpl reCaptcha = new ReCaptchaImpl(); reCaptcha.setPrivateKey("your_private_key");
String challenge = request.getParameter("recaptcha_challenge_field"); String uresponse = request.getParameter("recaptcha_response_field"); ReCaptchaResponse reCaptchaResponse = reCaptcha.checkAnswer(remoteAddr, challenge, uresponse); if (reCaptchaResponse.isValid()) { out.print("Answer was entered correctly!"); } else { out.print("Answer is wrong"); } %> </body> </html>
Trong mã trên:
remoteAddr
là địa chỉ IP của người dùng (được truyền đến reCAPTCHA)
máy chủ)uresponse
chứa câu trả lời của người dùng cho thử thách reCAPTCHA.Quan trọng: Lưu vào bộ nhớ đệm DNS
Java có một vấn đề gây khó chịu có thể gây ra kết nối giữa máy chủ của bạn và reCAPTCHA bị gián đoạn vài tháng một lần và reCAPTCHA sẽ ngừng hoạt động trong trang web của bạn khi xảy ra. Hãy đọc phần bên dưới để xem cách khắc phục vấn đề này.
Theo mặc định, Máy ảo Java (JVM) sẽ lưu vào bộ nhớ đệm vĩnh viễn tất cả các tra cứu DNS thay vì sử dụng giá trị thời gian tồn tại (TTL) được chỉ định trong bản ghi DNS của mỗi máy chủ lưu trữ. Dành cho những người ở làm sao bạn không biết, tra cứu DNS là một yêu cầu được gửi đến máy chủ DNS sẽ chuyển đổi tên máy chủ có thể đọc được đối với địa chỉ IP. Ví dụ: nó chuyển đổi www.recaptcha.net thành Địa chỉ IP 69.12.97.164. Tất nhiên là phức tạp hơn nhiều và nếu bạn muốn để tìm hiểu thêm, bài viết của wikipedia về DNS là một điểm khởi đầu phù hợp.
Mặc dù không thường xuyên, nhưng các máy chủ reCAPTCHA có thể thay đổi địa chỉ IP. Do Java đã lưu DNS vào bộ nhớ đệm tra cứu mãi mãi, điều này có thể khiến kết nối giữa máy chủ và reCAPTCHA của bạn bị gián đoạn khi địa chỉ IP của reCAPTCHA thay đổi. Nếu điều này xảy ra, hãy khởi động lại máy ảo JVM của bạn (ví dụ: khởi động lại máy tính) Tomcat) có thể khắc phục sự cố này do quá trình này dẫn đến một quá trình tra cứu DNS mới. Tuy nhiên, có thể bạn sẽ không muốn khởi động lại JVM của bạn vài tháng một lần bất cứ khi nào trang web của bạn bị lỗi vì reCAPTCHA máy chủ đã thay đổi địa chỉ IP.
Để khắc phục vấn đề này, bạn có thể chuyển -Dsun.net.inetaddr.ttl=30 vào app-server (điều này yêu cầu Java chỉ lưu DNS vào bộ nhớ đệm trong 30 giây). Trong Tomcat đối với Windows, thao tác này có thể được thực hiện bởi
- Dừng Tomcat
- Chuyển đến tomcat\bin
- Chạy Tomcat5w.exe
- Chuyển đến thẻ java
- Thêm thuộc tính java vào phần tuỳ chọn java: -Dsun.net.inetaddr.ttl=30
- Thoát
- Khởi động Tomcat
Trong Tomcat dành cho Linux hoặc MacOS X, bạn cần chạy lệnh sau trong dòng lệnh (sau đó khởi động lại Tomcat):
export JAVA_OPTS="$JAVA_OPTS -Dsun.net.inetaddr.ttl=30"
Đây là bài viết giải thích thêm về vấn đề này.