前言
瀏覽器驗證碼可解決用戶重復提交表單的問題。
內容: 獲取隨機驗證碼的圖片、獲取隨機驗證碼的內容
第一步:導包
kaptcha
第二部:配置servlet
配置包中的 KaptchaServlet
Servlet程序,路徑如圖:

配置操作:在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程序】
圖片示例:

2.取出驗證碼內容
通過session獲取
在jar包的常量類中可以找到 KAPTCHA_SESSION_KEY
常量值,這個值對應 session 的一個 key 值,這個 session 的 value 值就是驗證碼內容
如圖:

獲取代碼
/* req: HttpServletRequest req */
String token = (String) req.getSession().getAttribute(KAPTCHA_SESSION_KEY); // value就是驗證碼內容
req.getSession().removeAttribute(KAPTCHA_SESSION_KEY); // 刪了
問題及解決
刷新后驗證碼不變
問題瀏覽器:
firefox或ie
問題:
瀏覽器每次刷新都應該獲取到不同的驗證碼,如果刷新后驗證碼不變,考慮是瀏覽器緩存問題。
原因:
瀏覽器為了加快響應速度,可能會保存上次的驗證碼,瀏覽器刷新后會就會定位到上次的驗證碼緩存。
解決:
讓每個驗證碼的參數唯一,例如xcode?d=123
、xcode?d=32132
,這樣瀏覽器就不會重復定位。
可以加個時間戳。
js代碼參考示例:
this.src = "http://localhost:8080/book/kaptcha.jpg?d=" + new Date();