精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-01-21
jcaptcha是专业的解决方案,做到了极致,没必要自己去写了 下载之:http://sourceforge.net/projects/jcaptcha/files/ 根据他官方的例子,在struts中集成方法如下 环境:struts 1.3.x jcaptcha 1.0 1. 加载lib 把jcaptcha-1.0-all.jar 和 jcaptcha-integration-struts-1.0.jar 放到工程的lib里面,并设置包含之 2. 配置struts-config.xml 加plug-in描述 <!-- WizRtf2Html Charset=0 --><plug-in className
=“com.octo.captcha.module.struts.CaptchaServicePlugin”/>
加引用的 action <!-- WizRtf2Html Charset=0 --><action-mappings
>这个里面加以下代码
<!– add the render action–>
<action
path=“/jcaptcha”
type=“com.octo.captcha.module.struts.image.RenderImageCaptchaAction”
>
</action
>
即:可用 http://server/proj/jcaptcha.do 调用(如果你设置的是 *.do) http://server/proj/do/jcapcha (如果你设置的是 /do/*的话) 显示生成的图片 运行起来后,在浏览器中应该可以看到图片了 3. jsp中集成 如 login.jsp中 最前面加入taglib定义 增加显示和校验代码 <!– 加入错误提示,改成用errors了–> 增加了个点击刷新的功能,脚本如下 <!-- WizRtf2Html Charset=0 --><script language=“Javascript”
>
function
refresh_jcaptcha(obj){
//alert(obj);
obj.src=”<%=
request.getContextPath()%>
/do/jcaptcha?” + Math.random();
} </script>
4. 在提交页面对应的Action.excute()中增加校验代码处理 request 我把他封装成了函数 <!-- WizRtf2Html Charset=0 -->public
boolean
isJcaptchaOK(HttpServletRequest request)
{
log
.debug(“enter captcha challenge verification”
);
CaptchaService service = CaptchaServicePlugin.getInstance
()
.getService();
String responseKey = CaptchaServicePlugin.getInstance
()
.getResponseKey();
String captchaID = CaptchaModuleConfigHelper.getId
(request);
String challengeResponse = request.getParameter(responseKey);
if
(log
.isDebugEnabled())
log
.debug(“response for id “
+ captchaID + ” : “
+ challengeResponse);
request.removeAttribute(responseKey);
boolean
isResponseCorrect = false
;
if
(challengeResponse != null
)
try
{
isResponseCorrect = service.validateResponseForID(captchaID,
challengeResponse).booleanValue();
} catch
(CaptchaServiceException e) {
log
.debug(“Error during challenge verification”
, e);
request.setAttribute(CaptchaServicePlugin
.getInstance
().getMessageKey(),
CaptchaModuleConfigHelper
.getMessage
(request));
log
.debug(“forward to error with message : “
+ CaptchaModuleConfigHelper.getMessage
(request));
throw
(e);//抛出程序应用异常
}
if
(isResponseCorrect) {
log
.debug(“correct : forward to success”
);
return
true;//正确
}
if
(log
.isDebugEnabled()) {
log
.debug(“false : forward to failure with message : “
+ CaptchaModuleConfigHelper.getMessage
(request));
log
.debug(“in request attribute key : “
+ CaptchaServicePlugin.getInstance
().getMessageKey());
}
ActionErrors errors = new
ActionErrors();//用ActionError替换了他自己的Message
errors.add(“jcaptcha_error_msg”
, new
ActionMessage(
“error.jcaptcha.error.inputInvalid”
));
this
.addErrors(request, errors);
return
false;
}
—– excute(…)中: <!-- WizRtf2Html Charset=0 -->if
(!isJcaptchaOK(request))
return
mapping.findForward(“return_form”
); //返回页面
return mapping.findForward(“global_success” ); ——
大功告成
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-09-15
这个东西,据说效率不怎么高啊。
|
|
返回顶楼 | |
发表时间:2010-11-25
看你上面那样,点击换图片的时候总有点小问题,后来改成这样就好了。
obj.src="<%= request.getContextPath()%>"+"/jcaptcha?"+Math.random(); |
|
返回顶楼 | |
浏览 4373 次