一个Struts2验证码生成插件JCaptcha4Struts2的使用经历

最近在做一个网站,涉及到用户注册时验证码生成的部分。以前也没弄过,就谷歌了一把,发现了一个Struts2的验证码生成插件。网址是:[url]http://code.google.com/p/jcaptcha4struts2/[/url]。
按照开发指导步骤完成了相应的配置,用这个东西还是比较方便的。但是在使用过程中也碰到了不少的问题,现在与大家分享一下,以免走弯路。
1、首先是配置的问题。
依赖的包首先是Struts的jar包了,这里就不多说了。
另外当然是这个插件包:可以从网站上下载jcaptcha4struts\jcaptcha4struts2-2.0.2.jar
还有这两个包jcaptcha-1.0-all.jar跟imaging-01012005.jar
QuickStart:[url]http://code.google.com/p/jcaptcha4struts2/wiki/QuickStart[/url]上面说了两种使用方式。我这里采用的是拦截器第二种方式
2、页面校验码生成问题。
配置如下:
<div  align="left" class="verifycode">验 证 码:
<jcaptcha:image label="" width="88" height="21" /><div class="errtext2"><span class="myerror"><s:fielderror cssClass="myerror" fieldName="jCaptchaResponse"/></span></div>
</div>

配置好之后,在页面里面居然没有生成验证码的图片。看来的研究下这个验证码图片是如何生成的了。。图片的生成是通过JCaptchaImageAction来做到的,里面有这么个方法。依赖
protected ImageCaptchaService getImageCaptchaService() {
return JC4S2Config.getInstance().getImageCaptchaService();
}

依赖的是
JC4S2Config.getDefaultImageCaptchaService(){
。。。
Class<?> clazz = Class.forName(DEFAULT_IMG_CAPTCHA_IMPL);
return (ImageCaptchaService) clazz.newInstance();
。。。


在实例化具体的com.octo.captcha.service.image.DefaultManageableImageCaptchaService对象时候,出错了。发现还需要依赖commons-collections-3.2.1.jar包。嗯把这个包加上去就可以了 :lol:

生成之后发现图片太大,把其他的元素都挤到一边去了,这个好办,发现jcaptcha:image里面有属性,高度跟宽度。。设置相应的高度和宽度就可以了。然而杯具发生了 :cry: ,设置高度跟宽度不管用。看下面的代码(这个可以项目的源代码,没想到会出现这样的bug,然而到现在也没纠正过来)
public Component getBean(ValueStack stack, HttpServletRequest request,
HttpServletResponse response) {

JCaptchaImage bean = new JCaptchaImage(stack, request, response);

// Set attribute values
bean.setWidth(width);
bean.setWidth(height);//这里我想作者本来的意思是设置高度的,没想到设置了两次宽度
bean.setTextSize(textSize);

return bean;
}

没办法这个只好通过css解决了。
3、生成的图片不好辨认。。
如图所示,是我调整好一切之后在界面上的展示,但是缺点是生成的图片太不好辨认了。。
这一点比较郁闷。。
[img]http://dl.iteye.com/upload/attachment/478578/58197ffd-6e08-39fa-b0b9-e3ca07145e61.jpg[/img]

总结:这个插件还有不少的问题有待改进。比如高度不能调整。生成的图片不好辨认等问题。另外拦截器没有得到调用,暂时还不知道是什么原因,有待进一步研究。

拦截器没有调用成功,发现是配置的问题,按照指导原文的配置是有问题的,如下:

Following code snippet from struts.xml shows how this is done.

<package name="mypackage" extends="jcaptcha4struts2-default">

<action name="myformaction" class="com.my.app.FormAction">

<!-- Interceptor Stack -->
<interceptor-ref name="jcaptchaDefaultStack" />

<result name="input">/form.jsp</result>
<result>/done.jsp</result>
</action>

</package>

应该这样配置:
<action name="register" class="com.zhaozh.actions.RegisterAction">
<!-- <interceptor-ref name="jcaptchaDefaultStack"></interceptor-ref> -->
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="jcaptchaValidation"></interceptor-ref>
<result name="success">/index.jsp</result>
<result name="input">/register.jsp</result>
</action>

4、自定义拦截器,复写父类的方法:
复写是为了中文网页的需求,复写父类的方法,返回中文的提示
public class VerifyCodeInterceptor extends JCaptchaValidationIntercepter {

/**
*
*/
private static final long serialVersionUID = -5166016815535509471L;

@Override
protected String getValidationErrorMessage() {
return "输入的字符串跟图片上的字符串不匹配";
}

}

配置:

<interceptors>
<interceptor name="verifycode"
class="com.zhaozh.intercepter.VerifyCodeInterceptor"></interceptor>
</interceptors>
<action name="register" class="com.zhaozh.actions.RegisterAction">
<!-- <interceptor-ref name="jcaptchaDefaultStack"></interceptor-ref> -->
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="verifycode"></interceptor-ref>
<result name="success">/index.jsp</result>
<result name="input">/register.jsp</result>
</action>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值