Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Now if you want to customize your engine configuration, you'll need to define your own implementation

Setting a captcha custom service and engine

...

configuration in Spring

In this section we will describe how to set components to create a full CaptchaEngine.

...

Code Block
xml
xml
borderStylesolid
<bean id="wordtoimage" class="com.octo.captcha.component.image.wordtoimage.DeformedComposedWordToImage" >
		<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>
		<constructor-arg index="3"><ref bean="none"/></constructor-arg>
		<constructor-arg index="4"><ref bean="none"/></constructor-arg>
		<constructor-arg index="5"><ref bean="none"/></constructor-arg>
	</bean>

A FontGenerator provide Fonts to a WordToImage, differents fonts increase the difficulties for cracking software using a learning process. This one generate random fonts from a list, and the first two arguments are the minimum size and the maximum size of the font.

Code Block
xml
xml
borderStylesolid

	<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"/>
				<ref bean="fontTahoma"/>
				<ref bean="fontVerdana"/>
				<ref bean="fontComic"/>
				<ref bean="fontLucida"/>
			</list>
		</constructor-arg>
	</bean>

A font is declared like this :

Code Block
xml
xml
borderStylesolid


		<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>

The BackgrountGenerator component can be very simple like in the example, single color, or more complex with real picture, or fancy computed shapes. The first two arguments are always, the size (length and height) of the resulting image.

Code Block
xml
xml
borderStylesolid

	<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>

The TextPaster, according to his name, paste the text on the background. This can be done in a simple way, (see example below), or anothere implementation can paste randomly (but still readable) each character, or can double the text to make computer more confused. TextPaster can be even decorated to put perturbation around the text, a component, TextDecorator, is design for this purpose, see Annexes for some examples. Commons arguments for TextPaster are:
1. Minimal length of the text
2. Maximal length of the text
3. A color generator component to create the text color, see Annexes.
4. A Boolean to precise if each character should have a different color (true) or the same color for all the text (false)

Code Block
xml
xml
borderStylesolid

	<bean id="simpleWhitePaster" class="com.octo.captcha.component.image.textpaster.SimpleTextPaster" >
		<constructor-arg type="java.lang.Integer" index="0"><value>4</value></constructor-arg>
		<constructor-arg type="java.lang.Integer" index="1"><value>6</value></constructor-arg>
		<constructor-arg type="com.octo.captcha.component.image.color.ColorGenerator" index="2"><ref bean="colorGenRandomDark"/></constructor-arg>
		<constructor-arg index="3"><value>true</value></constructor-arg>
	</bean>

Now we are ready to setup the CaptchaService singleton...

Setting the CaptchaService in Spring

This component has a special section because it is the top level component, which is actually manipulated within your application. As for the engine there is many already configured CaptchaService, but the one we need is a custom one, which take an CaptchaEngine, as you can see, the BufferedEngineContairner, is in fact CaptchaEngine.

Code Block
xml
xml
borderStylesolid

	<bean id="imageCaptchaService"
		class="com.octo.captcha.service.multitype.GenericManageableCaptchaService">
		<constructor-arg index="0">
			<ref bean="imageContainer"/>
		</constructor-arg>
       	 	<constructor-arg index="1"><value>180</value></constructor-arg>
        		<constructor-arg index="2"><value>180000</value></constructor-arg>
	</bean>
Code Block
xml
xml
borderStylesolid