중요: reCAPTCHA API 버전 1.0은 더 이상 지원되지 않습니다. 버전 2.0으로 업그레이드하세요. 자세히 알아보기
reCAPTCHA Java 라이브러리는 CAPTCHA를 배치하는 간단한 방법을 제공합니다. 봇의 악용을 막을 수 있습니다. 라이브러리는 reCAPTCHA API:
Java/JSP에서 reCAPTCHA를 사용하려면 reCAPTCHA Java 라이브러리 (Soren 제공)를 참고하고 압축을 풉니다. 일반적으로 필요한 것은 로드할 수 있는 위치로 복사해야 하는 jar 파일 (recaptcha4j-X.X.X.jar) 생성합니다. 예를 들어, JSP를 실행하기 위해 Tomcat을 사용하는 경우 jar 파일에 파일을 WEB-INF/lib/ 디렉터리에 넣으세요.
빠른 시작
다음은 API 키를 등록하고 reCAPTCHA Java 라이브러리를 다운로드한 후 reCAPTCHA를 설치할 수 있습니다.
클라이언트 측 (보안문자 이미지를 표시하는 방법)
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);
마지막으로 reCAPTCHA 위젯을 표시하는 HTML은 다음에서 가져올 수 있습니다. 함수 호출:
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
는 reCAPTCHA에 전달되는 사용자의 IP 주소입니다.
서버)uresponse
에는 reCAPTCHA 챌린지에 대한 사용자의 답변이 포함됩니다.중요: DNS 캐싱
Java에 서버와 reCAPTCHA 간의 연결을 유발할 수 있는 성가신 문제가 있습니다. 몇 개월마다 중단되며 reCAPTCHA가 중단되면 사이트에서 reCAPTCHA가 더 이상 작동하지 않습니다. 정의합니다 이 문제를 해결하는 방법은 아래를 참고하세요.
기본적으로 Java 가상 머신 (JVM)은 각 호스트의 DNS 레코드에 지정된 TTL (수명) 값입니다. 다음 중 해당하는 경우: DNS 조회는 DNS 서버로 전송되는 요청으로 읽을 수 있는 호스트 이름을 IP 주소로 변환합니다. 예를 들어 www.recaptcha.net을 IP 주소 69.12.97.164. 물론 이것보다 훨씬 더 복잡하며 자세히 알아보려면 위키백과에 있는 DNS는 좋은 출발점이 됩니다.
reCAPTCHA 서버는 자주 변경되지는 않지만 IP 주소를 변경할 수 있습니다. Java는 DNS를 캐시하기 때문에 지속적으로 조회할 경우 서버와 reCAPTCHA 간의 연결이 끊어질 수 있습니다. reCAPTCHA IP 주소가 변경될 때 이 경우 JVM을 다시 시작 (예: Tomcat)은 새로운 DNS 조회를 유발하므로 문제를 해결할 수 있습니다. 하지만 reCAPTCHA 서버 때문에 사이트가 손상될 때마다 몇 개월에 한 번씩 JVM을 다시 시작하려고 할 때 서버의 IP 주소가 변경되었습니다.
이 문제를 완전히 해결하려면 -Dsun.net.inetaddr.ttl=30을 app-server로 설정합니다 (이는 Java에 30초 동안만 DNS를 캐시하도록 지시합니다). Windows용 Tomcat에서는 해야 할 일
- Tomcat 중지
- tomcat\bin으로 이동
- Tomcat5w.exe 실행
- 자바 탭으로 이동
- Java 옵션 섹션에 Java 속성 추가: -Dsun.net.inetaddr.ttl=30
- 종료
- Tomcat 시작
Linux 또는 MacOS X용 Tomcat에서는 명령줄에 다음 명령을 실행해야 합니다. (그런 다음 Tomcat을 다시 시작하세요)
export JAVA_OPTS="$JAVA_OPTS -Dsun.net.inetaddr.ttl=30"
도움말 확인하기 이 문제에 대해 더 자세히 설명해 드리겠습니다.