谷歌验证码kaptcha的简单使用

前言

浏览器验证码可解决用户重复提交表单的问题。

内容: 获取随机验证码的图片、获取随机验证码的内容

第一步:导包

kaptcha

第二部:配置servlet

配置包中的 KaptchaServlet Servlet程序,路径如图:

image-20210905224854003

配置操作:在web.xml(web项目配置文件)中加入servlet配置

<servlet>
    <servlet-name>KaptchaServlet</servlet-name>
    <servlet-class>com.google.code.kaptcha.servlet.KaptchaServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>KaptchaServlet</servlet-name>
    <url-pattern>/kaptcha.jpg</url-pattern> 
</servlet-mapping>
<!--  命名为 kaptcha.jpg 是为了便于区分,这些代码包含在web-app标签中 -->

第三步:使用

1.获取验证码图片

浏览器访问KaptchaServlet程序路径即可获取到验证码 每次刷新都有不同验证码

示例:

http://localhost:8080/book/kaptcha.jpg
【http://ip:port/工程名/KaptchaServlet程序】

图片示例:

image-20210905225438435

2.取出验证码内容

通过session获取

在jar包的常量类中可以找到 KAPTCHA_SESSION_KEY 常量值,这个值对应 session 的一个 key 值,这个 session 的 value 值就是验证码内容

如图:

image-20210905225828222

获取代码

/* req: HttpServletRequest req */
String token = (String) req.getSession().getAttribute(KAPTCHA_SESSION_KEY); // value就是验证码内容
req.getSession().removeAttribute(KAPTCHA_SESSION_KEY); // 删了

问题及解决

刷新后验证码不变

问题浏览器:

firefox或ie

问题:

浏览器每次刷新都应该获取到不同的验证码,如果刷新后验证码不变,考虑是浏览器缓存问题。

原因:

浏览器为了加快响应速度,可能会保存上次的验证码,浏览器刷新后会就会定位到上次的验证码缓存。

解决:

让每个验证码的参数唯一,例如xcode?d=123xcode?d=32132,这样浏览器就不会重复定位。

可以加个时间戳。

js代码参考示例:

this.src = "http://localhost:8080/book/kaptcha.jpg?d=" + new Date();

参数

posted @ 2021-09-05 23:28  yangruomao  阅读(2980)  评论(0编辑  收藏  举报