Ważne: interfejs API reCAPTCHA w wersji 1.0 nie jest już obsługiwany, uaktualnij go do wersji 2.0. Więcej informacji
Biblioteka Java reCAPTCHA pozwala w prosty sposób umieścić test CAPTCHA. w witrynie działającej w języku Java, aby zapobiegać ich nadużywaniu przez boty. Biblioteka obejmuje Interfejs API reCAPTCHA.
Aby korzystać z reCAPTCHA w połączeniu z Javą/JSP, pobierz pakiet reCAPTCHA Java Biblioteka (z pomocą Sorena) i rozpakuj ją. Zazwyczaj wystarczy, że podasz pliku jar (recaptcha4j-X.X.X.jar), który musisz skopiować do miejsca, w którym zostanie wczytany przez aplikację Java. Na przykład jeśli używasz kodu Tomcat do uruchamiania języka JSP, możesz umieścić plik jar w katalogu o nazwie WEB-INF/lib/.
Szybki start
Gdy już zarejestrujesz klucze interfejsu API i pobierzesz bibliotekę reCAPTCHA w Javie, poniżej znajdziesz podstawowe instrukcje dotyczące instalując reCAPTCHA w swojej witrynie.
Po stronie klienta (jak wyświetlić obraz CAPTCHA)
Jeśli chcesz użyć wtyczki Java do wyświetlania widżetu reCAPTCHA, musisz zaimportować dla odpowiednich klas reCAPTCHA. W JSP należy wstawić te wiersze w pobliżu argumentu na górze pliku z elementem formularza, w którym będzie wyświetlany widżet reCAPTCHA:
<%@ page import="net.tanesha.recaptcha.ReCaptcha" %> <%@ page import="net.tanesha.recaptcha.ReCaptchaFactory" %>
Następnie musisz utworzyć instancję reCAPTCHA:
ReCaptcha c = ReCaptchaFactory.newReCaptcha("your_public_key", "your_private_key", false);
Kod HTML służący do wyświetlania widżetu reCAPTCHA można też uzyskać z następujących adresów: wywołanie funkcji:
c.createRecaptchaHtml(null, null)
Dlatego w języku JSP kod może wyglądać mniej więcej tak:
<%@ 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>
Nie zapomnij zastąpić pól your_public_key
i your_private_key
wartościami
par klucz-wartość interfejsu API.
Po stronie serwera (jak sprawdzić, czy użytkownik wpisał poprawną odpowiedź)
W aplikacji, która weryfikuje formularz, musisz najpierw zaimportować Klasy reCAPTCHA:
import net.tanesha.recaptcha.ReCaptchaImpl; import net.tanesha.recaptcha.ReCaptchaResponse;
Następnie musisz wstawić kod weryfikujący rozwiązanie reCAPTCHA wpisane przez użytkownika. Poniższy przykład (w JSP) pokazuje, jak to zrobić:
<%@ 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>
W powyższym kodzie:
remoteAddr
to adres IP użytkownika (przekazywany do reCAPTCHA).
serwerów)uresponse
zawiera odpowiedź użytkownika na test reCAPTCHA.Ważne: buforowanie DNS
W Javie występuje irytujący problem, który może powodować połączenie między Twoim serwerem a reCAPTCHA zostanie przerwany co kilka miesięcy, a reCAPTCHA przestanie działać w Twojej witrynie, co się dzieje. Poniżej znajdziesz informacje, jak rozwiązać ten problem.
Domyślnie maszyna wirtualna Java (JVM) na zawsze buforuje wszystkie wyszukiwania DNS, zamiast używać wartość czasu życia danych (TTL) określoną w rekordzie DNS każdego hosta. Dla osób, które: skąd nie wiesz, wyszukiwanie DNS to żądanie wysyłane do serwera DNS, który konwertuje czytelna nazwa hosta na adres IP. Na przykład konwertuje www.recaptcha.net na Adres IP 69.12.97.164. Jest to oczywiście o wiele bardziej skomplikowane, a jeśli więcej informacji znajdziesz w artykule w Wikipedii na temat DNS to dobry punkt wyjścia.
Chociaż niezbyt często, serwery reCAPTCHA mogą zmieniać adresy IP. Ponieważ Java buforuje DNS podczas wyszukiwania w nieskończoność może to spowodować przerwanie połączenia między serwerem a reCAPTCHA po zmianie adresu IP reCAPTCHA. W takim przypadku uruchom ponownie JVM (np. Tomcat) może rozwiązać ten problem, ponieważ powoduje uruchomienie nowego wyszukiwania DNS. Pewnie jednak nie będziesz chcesz uruchamiać ją ponownie raz na kilka miesięcy za każdym razem, gdy Twoja witryna ulega awarii, ponieważ reCAPTCHA Serwery zmieniły adres IP.
Aby naprawić ten problem, możesz przekazać parametr -Dsun.net.inetaddr.ttl=30 do app-server (powoduje to, że Java będzie buforować DNS tylko przez 30 sekund). W oprogramowaniu Tomcat dla systemu Windows może to zostać
- Zatrzymaj Tomcat
- Otwórz tomcat\bin
- Uruchom program Tomcat5w.exe
- Otwórz kartę Java
- Dodaj właściwość Java do sekcji opcji Java: -Dsun.net.inetaddr.ttl=30
- Zakończ
- Uruchom tomcat
W oprogramowaniu Tomcat na Linuksa lub MacOS X musisz uruchomić poniższe polecenie w wierszu poleceń (Następnie uruchom ponownie Tomcat):
export JAVA_OPTS="$JAVA_OPTS -Dsun.net.inetaddr.ttl=30"
Oto artykuł na ten temat.