ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 스프링 - 오픈소스(JCapcha) 이용해보기..캡차 서비스
    Etc 2016. 3. 17. 16:15

    ※ 해당 게시 글은 이미지(텍스트) 기반 만을 설명

    ※ 목적 : JCapCha를 사용하기 앞서 bean 설정에 대하여 짚고 넘어가기 위해서이고 예제에 나오느 클래스 들에 대해 공부하기 위함이다.


    우리가 웹의 세션을 사용하기 위해서 tocmat 같은 was를 이용하듯이 캡차도 엔진을 설정해야 한다.

    해당 설정은 다음과 같이 bean을 만들기 바란다.

    <bean id="captchaService" class="com.octo.captcha.service.multitype.GenericManageableCaptchaService">
     <constructor-arg index="0" ref="imageEngine"/>
     <constructor-arg type="int" index="1" value="180"/> <!-- minGuarantedStorageDelayInSeconds -->
     <constructor-arg type="int" index="2" value="180000"/> <!-- maxCaptchaStoreSize -->
     <constructor-arg type="int" index="3" value="75000"/> <!-- captchaStoreLoadBeforeGarbageCollection -->
    </bean>


    클라이언트에게 노출시킬 이미지(텍스트)를 만들어 내기 위한 설정을 시작해보려한다. 


    <bean id="imageEngine" class="com.octo.captcha.engine.GenericCaptchaEngine">
        <constructor-arg index="0">
            <list>
                <ref bean="CaptchaFactory"/>
            </list>
        </constructor-arg>
    </bean>

    GenericCaptchaEngine 은 CapchaEngine 이라는 Interface 를 Implement 하여 구현한 클래스이다.


    앞서 말했듯이 소리보다는 이미지(텍스트) 형식만을 설명하는게 주 목적이기 때문에 수많은 클래스중에 

    GimyFactory를 bean 으로 등록하여 참조시켰습니다.


    GimyFactory의 특징 :

    1) 워드 생성기를 통해 읽을 수 있는 텍스트를 만들 수 있다.

    2) 단어 이미지, 텍스트에서 보안 문자를 생성


    <bean id="CaptchaFactory" class="com.octo.captcha.image.gimpy.GimpyFactory" >
        <constructor-arg><ref bean="wordgen"/></constructor-arg>
        <constructor-arg><ref bean="wordtoimage"/></constructor-arg>
    </bean>


    위의 설정을 보면 알겠지만 지금부터는 공장을 돌리기 위한 뼈대들이 필요합니다. (기본적으로 제공되는 6000개의 영어 단어중에 하나의 단어를 읽고 제공)


    <bean id="wordgen" class"com.octo.captcha.component.word.wordgenerator.DictionaryWordGenerator" >
        <constructor-arg><ref bean="filedict"/></constructor-arg>
    </bean>


    <bean id="filedict" class="com.octo.captcha.component.word.FileDictionary" >
        <constructor-arg index="0"><value>toddlist</value></constructor-arg>
    </bean>


    JCaptCha는 클라이언트 입 맛에 맞게 보안문자를 제공하기 위해 주로 세 가지 정도의 구성 요소를 제공한다.


    • A font generator
    • A background generator
    • A Text paster


    <bean id="wordtoimage" class="com.octo.captcha.component.image.wordtoimage.ComposedWordToImage" >
        <constructor-arg index="0"><ref bean="fontGenRandom"/></constructor-arg>
        <constructor-arg index="1"><ref bean="backGenUni"/></constructor-arg>
        <constructor-arg index="2"><ref bean="simpleWhitePaster"/></constructor-arg>
    </bean>


    순서는 위와같이 무조건 해야하나? 아니다.. 초짜가 아니고서아 index 만 봐도 순위를 정할 수 있다는것을 할것이다.


    1) A font generator(폰트설정)

    <bean id="fontGenRandom" class="com.octo.captcha.component.image.fontgenerator.RandomFontGenerator" >
        <constructor-arg index="0"><value>40</value></constructor-arg>         <!-- 최소 사이즈 -->
        <constructor-arg index="1"><value>50</value></constructor-arg>         <!-- 최대 사이즈 -->
        <constructor-arg index="2">
            <list>
                <ref bean="fontArial"/>                                        <!-- 글씨 종류(궁서,굴림 등등..)
            </list>
        </constructor-arg>
    </bean>


    -- 원하는 글씨 설정 --


    <bean id="fontArial" class="java.awt.Font" >
        <constructor-arg index="0"><value>Arial</value></constructor-arg>
        <constructor-arg index="1"><value>0</value></constructor-arg>
        <constructor-arg index="2"><value>10</value></constructor-arg>
    </bean>


    2) A background generator(이미지 설정)

    <bean id="backGenUni" class="com.octo.captcha.component.image.backgroundgenerator.UniColorBackgroundGenerator" >
        <constructor-arg index="0"><value>300</value></constructor-arg>                 <!-- 가로 사이즈 -->
        <constructor-arg index="1"><value>100</value></constructor-arg>                 <!-- 세로 사이즈 -->
    </bean>



    3) A Text Paster(텍스트 길이 제한 및 색상 설정)


    <bean id="simpleWhitePaster" class="com.octo.captcha.component.image.textpaster.SimpleTextPaster" >
        <constructor-arg type="java.lang.Integer" index="0">
            <value>3</value>                                          <!-- 최소 길이 -->
        </constructor-arg>
        <constructor-arg type="java.lang.Integer" index="1">
            <value>5</value>                                          <!-- 최대 길이 -->
        </constructor-arg>
        <constructor-arg type="java.awt.Color" index="2">
            <ref bean="colorGreen"/>                                  <!-- 색상 -->
        </constructor-arg>
    </bean>

    색상 정의 :

    <bean id="colorGreen" class="java.awt.Color" >
        <constructor-arg index="0"><value>0</value></constructor-arg>
        <constructor-arg index="1"><value>255</value></constructor-arg>
        <constructor-arg index="2"><value>0</value></constructor-arg>
    </bean>


    자 드디어 설정이 끝났다. 항상 개발은 설정 작업이 개발의 반을 잡아먹는거 같다 ...


    예제를 통해 부족하거나 몰랐던 클래스에 대해 정리하면서 마무리 하도록 하겠다.






    ByteArrayOutputStream 

    : 내부적으로 저장 공간이 있어 해당 메소드를 이용해서 출력하게 되면 출력되는 모든 내용들이 내부적인 저장 공간에 쌓이게 된다.



    BufferedImage 

    : 서브 클래스는, 이미지 데이터의 액세스 가능한 버퍼를 갖춘 Image 를 기술한다.

    ColorModel(픽셀값을 색성분 및 알파 성분으로 변환하는 메소드를 캡슐화 한것) 및 

    이미지 데이터의 Rster(픽셀로 구성되는 구형 배열을 표현하는 클래스)로 구성되어 있다.


    BufferedImage 

    : 간단한 인코딩 및 디코딩을 수행하는 정적 인 편리한 메소드를 포함하는 클래스이다.



Designed by Tistory.