首页 / 软件开发 / JAVA / 在SpringSide 3 中使用JCaptcha
在SpringSide 3 中使用JCaptcha2011-01-15 BlogJava 海边沫沫在目前的网络上,想必大家对验证图片已经司空见惯了。验证图片是区分人和计算机的一种既有效又简单的方法。为了提高网站的安全性,防止黑客利用计算机进行暴力破解和防止黑客使用程序自动提交大量垃圾信息,在我们的网站中引入验证码机制是必要的。在SpringSide 3的Showcase中,江南白衣演示了JCaptcha。Captcha是Completely Automated Public Turing Test to Tell Computers and Humans Apart (全自动区分计算机和人类的图灵测试)的简称,而JCaptcha是一个在该理论下的基于Java的一个实现。我终于开始看Showcase中的一些特性了,下面来谈谈把JCaptcha集成到项目中的一些想法。首先要把如下四个jar包拷贝到项目中:jcaptcha-1.0.jarjcaptcha-api-1.0.jarimaging-01012005.jarspringside3-jee-3.1.5.jar以上四个jar文件前两个不用我多解释,imaging-01012005.jar是必须要的,因为它提供了JCaptcha需要的 WaterFilter类,而springside3-jee-3.1.5.jar里面包含的就是SpringSide 3对JCaptcha的扩展。SpringSide 3对JCaptcha做了哪些扩展呢?主要表现在两个方面:一是编写了一个Filter,用来配合SpringSecurity,二是实现了一个图片生成引擎,即GMailEngine。事实上,JCaptcha是可以直接使用的,即直接使用CaptchaService类来生成和验证图片中的信息,而CaptchaService可以使用Spring管理;但是一旦和SpringSecurity配合起来使用就比较麻烦了,因为我们不可能去修改SpringSecurity的代码,所以就只能在web.xml中配置Filter了。但是在不和SpringSecurity配合的情况下,我们还是少不了直接使用 CaptchaService类,因为Filter是定制死了的,不灵活,如果我们要返回供AJAX使用的字符串,就必须得自己写代码。好了,下面看看具体步骤。1、先在Spring的配置文件中配置CaptchaService的Bean,如下:<!--JCaptcha验证码服务 -->
<bean id="captchaService" class="com.octo.captcha.service.image.DefaultManageableImageCaptchaService">
<property name="captchaEngine">
<bean class="org.springside.modules.security.jcaptcha.GMailEngine" />
</property>
<property name="minGuarantedStorageDelayInSeconds" value="600" />
</bean>2、在web.xml中配置Filter,如下:<!-- SpringSide"s JCaptcha filter -->
<filter>
<filter-name>jcaptchaFilter</filter-name>
<filter-class>org.springside.modules.security.jcaptcha.JCaptchaFilter</filter-class>
<init-param>
<param-name>failureUrl</param-name>
<param-value>/login.action?error=2</param-value>
</init-param>
</filter><!-- jcaptcha图片生成URL. -->
<filter-mapping>
<filter-name>jcaptchaFilter</filter-name>
<url-pattern>/security/jcaptcha.jpg</url-pattern>
</filter-mapping>
<!-- jcaptcha登录表单处理URL.
必须放在springSecurityFilter的filter-mapping定义之前 -->
<filter-mapping>
<filter-name>jcaptchaFilter</filter-name>
<url-pattern>/j_spring_security_check</url-pattern>
</filter-mapping>