谷歌kaptcha图片验证码的使用
1. 导入谷歌验证码的jar包 kaptcha-2.3.2.jar
2. 在web.xml中配置用于生成验证码的KaptchaServlet程序
<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>
3. 在表单中使用img标签去显示验证码图片并使用它
<form action="http://localhost:8080/tmp/registServlet" method="get"> 用户名:<input type="text" name="username" > <br> 验证码:<input type="text" style="width: 60px;" name="code"> <img src="http://localhost:8080/tmp/kaptcha.jpg" alt="" style="width: 100px; height: 28px;"> <br> <input type="submit" value="登录"> </form>
4. 在服务器获取谷歌生成的验证码和客户端发送过来的验证码比较使用
@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String token = (String) req.getSession().getAttribute(KAPTCHA_SESSION_KEY); req.getSession().removeAttribute(KAPTCHA_SESSION_KEY); String code = req.getParameter("code"); String username = req.getParameter("username"); if (token != null && token.equalsIgnoreCase(code)) { System.out.println("保存到数据库:" + username); resp.sendRedirect(req.getContextPath() + "/ok.jsp"); } else { System.out.println("请不要重复提交表单"); } }
5. 实现切换验证码的问题
$("#code_img").click(function () {
this.src = "${basePath}kaptcha.jpg?d=" + new Date();
});
?d=" + new Date()是为了越过客户端缓存(该缓存以资源路径和查询参数命名)
浙公网安备 33010602011771号