자바/JSP에서 reCAPTCHA 사용

중요: 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_keyyour_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에서는 해야 할 일

    1. Tomcat 중지
    2. tomcat\bin으로 이동
    3. Tomcat5w.exe 실행
    4. 자바 탭으로 이동
    5. Java 옵션 섹션에 Java 속성 추가: -Dsun.net.inetaddr.ttl=30
    6. 종료
    7. Tomcat 시작

    Linux 또는 MacOS X용 Tomcat에서는 명령줄에 다음 명령을 실행해야 합니다. (그런 다음 Tomcat을 다시 시작하세요)

        export JAVA_OPTS="$JAVA_OPTS -Dsun.net.inetaddr.ttl=30"

    도움말 확인하기 이 문제에 대해 더 자세히 설명해 드리겠습니다.

    추가 자료

  • 디자인 맞춤설정
  • 도움말 및 가이드라인
  • 문제 해결