프로그램/java

CAPTCHA java approach - simpleCaptcha

mulderu 2011. 12. 11. 23:33
우리말로 발음하면 "캡챠" 라고 해야 하는지.. 잘 모르겠지만 아래가 wiki에 등록된 정의 입니다.


http://ko.wikipedia.org/wiki/CAPTCHA 


CAPTCHA위키백과, 우리 모두의 백과사전.


CAPTCHA(Completely Automated Public Turing test to tell Computers and Humans Apart)
어떠한 사용자가 실제 인간인지 컴퓨터 프로그램인지를 구별하기 위해 사용되는 방법으로, 인간은 구별할 수 있지만 컴퓨터는 
구별하기 힘들게 의도적으로 비틀어 놓거나 그림을 주고 그 그림에 쓰여 있는 내용을 물어보는 방법이 흔히 사용된다.


 
요즘 구글이나 트위터 등 오픈된 인터넷 서비스에 가입하려면 반드시 아래와 같은 그림을 보고 그 단어를 정확히
입력 해 줘야 가입이 가능하도록 되어 있습니다.  



아래는 제가 이번 블로그에서 사용한 SimpleCaptcha (http://sourceforge.net/projects/simplecaptcha/로 구현된 화면 입니다.





------------------------------------------------------------------------------------------------------------
아래는 simpleCaptcha 에서 다운로드 받은 war로 eclipse project를 구성한 예제 입니다.



아래는 simpleCaptcha.jsp 의 내용입니다.

<img src="<c:url value="simpleCaptcha.png" />"><br />

위내용은 <img src="simpleCaptcha.png"/> 로 해석되고,  captcha servlet을 통해 해석됩니다.


web.xml

<servlet>
<servlet-name>SimpleCaptcha</servlet-name>
<servlet-class>nl.captcha.servlet.SimpleCaptchaServlet</servlet-class>
        <init-param>
            <param-name>captcha-width</param-name>
            <param-value>300</param-value>
        </init-param>
        <init-param>
            <param-name>captcha-height</param-name>
            <param-value>100</param-value>
        </init-param>
</servlet>

<servlet-mapping>
<servlet-name>SimpleCaptcha</servlet-name>
<url-pattern>/simpleCaptcha.png</url-pattern>
</servlet-mapping>  




       <servlet>
<servlet-name>StickyCaptcha</servlet-name>
<servlet-class>nl.captcha.servlet.StickyCaptchaServlet</servlet-class>

        <init-param>
            <!-- Optional; defaults to 200. -->
            <param-name>captcha-width</param-name>
            <param-value>250</param-value>
        </init-param>
        <init-param>
            <!-- Optional; defaults to 50. -->
            <param-name>captcha-height</param-name>
            <param-value>75</param-value>
        </init-param>
        <init-param>
            <!-- Time To Live, in ms. Optional; Defaults to 600000ms. -->
            <param-name>ttl</param-name>
            <param-value>100000</param-value>
        </init-param>
    </servlet>

<servlet-mapping>
<servlet-name>StickyCaptcha</servlet-name>
<url-pattern>/stickyCaptcha.png</url-pattern>
</servlet-mapping>


 ---------------------------------------------------------------------------------------------------------------
jsp 로 captcha 그림 표시 및 입력 처리는 아래의 jsp를 보시면 알 수 있습니다.

표시 및 입력

<img src="<c:url value="stickyCaptcha.png" />"><br />
    <form method="post" action="captchaSubmit.jsp">
        Answer: <input name="answer" /><input type="submit" />
    </form>


 
입력값 확인

<% 
// We're doing this in a JSP here, but in your own app you'll want to put
// this logic in your MVC framework of choice.

Captcha captcha = (Captcha) session.getAttribute(Captcha.NAME);
request.setCharacterEncoding("UTF-8"); // Do this so we can capture non-Latin chars
String answer = request.getParameter("answer");
if (captcha.isCorrect(answer)) { %>
    <b>Correct!</b>
<% } else { %>
    <b>Wrong!</b>
<% } %>



필자가 테스트 해보니, simpleCaptcha는 아주 잘 동작 되고, 사용하기도 아주 편리했습니다.