สำคัญ: ไม่รองรับ reCAPTCHA API เวอร์ชัน 1.0 อีกต่อไป โปรดอัปเกรดเป็นเวอร์ชัน 2.0 ดูข้อมูลเพิ่มเติม
ไลบรารี reCAPTCHA Java มอบวิธีง่ายๆ ในการวาง CAPTCHA บนเว็บไซต์แบบ Java ซึ่งจะช่วยคุณป้องกันบ็อตไม่ให้ล่วงละเมิดได้ ไลบรารีครอบคลุม reCAPTCHA API
หากต้องการใช้ reCAPTCHA กับ Java/JSP โปรดดาวน์โหลด reCAPTCHA Java คลังวิดีโอ (จัดทำโดย Soren) และแตกไฟล์ โดยทั่วไปแล้วสิ่งเดียวที่คุณต้องมีคือ ไฟล์ jar (recaptcha4j-X.X.X.jar) ซึ่งต้องคัดลอกไปยังตำแหน่งที่จะโหลดได้ โดยแอปพลิเคชัน Java ตัวอย่างเช่น ถ้าคุณใช้ Tomcat ในการเรียกใช้ JSP คุณอาจใส่ jar ในไดเรกทอรีที่ชื่อ WEB-INF/lib/ เท่านั้น
คู่มือเริ่มต้นฉบับย่อ
หลังจากลงชื่อสมัครใช้คีย์ API และดาวน์โหลด Java Library ของ reCAPTCHA แล้ว วิธีการเบื้องต้นมีดังนี้ ติดตั้ง reCAPTCHA ในเว็บไซต์
ฝั่งไคลเอ็นต์ (วิธีทำให้รูปภาพ CAPTCHA ปรากฏขึ้น)
หากต้องการใช้ปลั๊กอิน Java เพื่อแสดงวิดเจ็ต reCAPTCHA คุณจะต้องนำเข้า คลาส reCAPTCHA ที่เหมาะสม ใน JSP คุณจะต้องแทรกบรรทัดเหล่านี้ใกล้กับ ที่ด้านบนของไฟล์ซึ่งมีเอลิเมนต์แบบฟอร์มที่จะแสดงวิดเจ็ต reCAPTCHA
<%@ page import="net.tanesha.recaptcha.ReCaptcha" %> <%@ page import="net.tanesha.recaptcha.ReCaptchaFactory" %>
จากนั้นให้สร้างอินสแตนซ์ของ reCAPTCHA
ReCaptcha c = ReCaptchaFactory.newReCaptcha("your_public_key", "your_private_key", false);
สุดท้าย คุณสามารถรับ HTML ที่แสดงวิดเจ็ต reCAPTCHA จาก การเรียกฟังก์ชัน:
c.createRecaptchaHtml(null, null)
ดังนั้น ใน JSP โค้ดของคุณจะมีลักษณะดังนี้
<%@ 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>
อย่าลืมแทนที่ your_public_key
และ your_private_key
ด้วย
ค่าคีย์ API
ฝั่งเซิร์ฟเวอร์ (วิธีทดสอบว่าผู้ใช้ป้อนคำตอบที่ถูกต้องหรือไม่)
ในแอปพลิเคชันที่ยืนยันแบบฟอร์มของคุณ ก่อนอื่นคุณต้องนำเข้าข้อมูล คลาส reCAPTCHA
import net.tanesha.recaptcha.ReCaptchaImpl; import net.tanesha.recaptcha.ReCaptchaResponse;
ถัดไป คุณต้องแทรกโค้ดที่ยืนยันโซลูชัน reCAPTCHA ที่ผู้ใช้ป้อน ตัวอย่างด้านล่าง (ใน JSP) แสดงวิธีดำเนินการดังกล่าว
<%@ 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>
ในโค้ดด้านบน
remoteAddr
คือที่อยู่ IP ของผู้ใช้ (ซึ่งจะส่งไปยัง reCAPTCHA
เซิร์ฟเวอร์)uresponse
มีคำตอบของผู้ใช้ในการตอบคำถาม reCAPTCHAสำคัญ: การแคช DNS
Java มีปัญหาที่น่ารำคาญซึ่งอาจทำให้การเชื่อมต่อระหว่างเซิร์ฟเวอร์กับ reCAPTCHA ถูกขัดจังหวะทุก 2-3 เดือน และ reCAPTCHA จะหยุดทำงานในเว็บไซต์เมื่อ เกิดขึ้น โปรดอ่านข้อมูลด้านล่างเพื่อให้ทราบวิธีแก้ไขปัญหานี้
โดยค่าเริ่มต้น Java Virtual Machine (JVM) จะแคชการค้นหา DNS ทั้งหมดอย่างถาวรแทนที่จะใช้ ค่า Time to Live (TTL) ที่ระบุไว้ในระเบียน DNS ของแต่ละโฮสต์ สำหรับ คุณจะไม่ทราบได้อย่างไร การค้นหา DNS คือคำขอที่ส่งไปยังเซิร์ฟเวอร์ DNS ซึ่งแปลง ชื่อโฮสต์ที่อ่านได้ไปยังที่อยู่ IP ตัวอย่างเช่น แปลง www.recaptcha.net เป็น ที่อยู่ IP 69.12.97.164 แต่จริงๆ แล้วมีความซับซ้อนกว่านั้นมาก และหากคุณต้องการ อ่านข้อมูลเพิ่มเติมได้ที่บทความของ Wikipedia DNS คือจุดเริ่มต้นที่ดี
เซิร์ฟเวอร์ reCAPTCHA สามารถเปลี่ยนที่อยู่ IP ได้แม้จะไม่ได้เกิดขึ้นบ่อยนัก เนื่องจาก Java แคช DNS การค้นหาตลอดไป ซึ่งอาจทำให้การเชื่อมต่อระหว่างเซิร์ฟเวอร์และ reCAPTCHA ลดลง เมื่อที่อยู่ IP ของ reCAPTCHA เปลี่ยนแปลง หากเกิดเหตุการณ์นี้ขึ้น ให้รีสตาร์ท JVM (เช่น รีสตาร์ท Tomcat) สามารถแก้ปัญหาเนื่องจากจะทำให้มีการค้นหา DNS ใหม่ แต่ทั้งนี้คุณอาจ ต้องการรีสตาร์ท JVM 1 ครั้งทุกๆ 2-3 เดือนเมื่อใดก็ตามที่เว็บไซต์ของคุณไม่ทำงานเนื่องจาก reCAPTCHA เซิร์ฟเวอร์เปลี่ยนที่อยู่ IP
หากต้องการแก้ไขปัญหานี้ คุณสามารถส่ง -Dsun.net.inetaddr.ttl=30 ไปยัง App-server (ซึ่งจะบอก Java ให้แคช DNS เป็นเวลา 30 วินาทีเท่านั้น) ใน Tomcat สำหรับ Windows การดำเนินการนี้สามารถ ดำเนินการโดย
- หยุด Tomcat
- ไปที่ tomcat\bin
- เรียกใช้ Tomcat5w.exe
- ไปที่แท็บ Java
- เพิ่มคุณสมบัติ Java ลงในส่วนตัวเลือก Java: -Dsun.net.inetaddr.ttl=30
- ออก
- เริ่ม Tomcat
ใน Tomcat for Linux หรือ MacOS X คุณต้องเรียกใช้คำสั่งต่อไปนี้ในบรรทัดคำสั่ง (จากนั้นรีสตาร์ท Tomcat):
export JAVA_OPTS="$JAVA_OPTS -Dsun.net.inetaddr.ttl=30"
บทความ เพื่ออธิบายเพิ่มเติมเกี่ยวกับปัญหานี้