D Google驗證碼API的使用---kaptcha


谷歌kaptcha圖片驗證碼的使用

谷歌驗證碼 kaptcha 使用步驟如下:

  1、導入谷歌驗證碼的 jar 包

    kaptcha-2.3.2.jar

  2、在 web.xml 中去配置用於生成驗證碼的 Servlet 程序

1 <servlet>
2         <servlet-name>KaptchaServlet</servlet-name>
3         <servlet-class>com.google.code.kaptcha.servlet.KaptchaServlet</servlet-class>
4 </servlet>
5 
6 <servlet-mapping>
7         <servlet-name>KaptchaServlet</servlet-name>
8         <url-pattern>/kaptcha.jpg</url-pattern>
9 </servlet-mapping>

測試: http://localhost:8080/book/kaptcha.jpg 

  3、在表單中使用img標簽去顯示驗證碼並使用它

   新建kaptcha.jsp

 1 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
 2 <html>
 3 <head>
 4     <title>kaptcha</title>
 5 </head>
 6 <body>
 7 
 8 <form action="http://localhost:8080/book/testServlet" method="get">
 9     用戶名:<input type="text" name="username" > <br>
10     驗證碼:<input type="text" style="width: 80px;" name="code">
11     <img src="http://localhost:8080/book/kaptcha.jpg" alt="" style="width: 100px; height: 28px;"> <br>
12     <input type="submit" value="登錄"> </form>
13 </body>
14 </html>
kaptcha.jsp

  4、在服務器獲取谷歌生成的驗證碼和客戶端發過來的驗證碼比較使用

   新建TestServlet.java

 1 package com.gychen.web;
 2 
 3 import javax.servlet.ServletException;
 4 import javax.servlet.http.HttpServlet;
 5 import javax.servlet.http.HttpServletRequest;
 6 import javax.servlet.http.HttpServletResponse;
 7 import java.io.IOException;
 8 
 9 import static com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY;
10 
11 public class TestServlet extends HttpServlet {
12     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
13 
14         //獲取Session中的驗證碼
15         String token = (String) request.getSession().getAttribute(KAPTCHA_SESSION_KEY);
16 
17         request.getSession().invalidate();
18         //獲取驗證碼
19         String code = request.getParameter("code");
20 
21         //獲取用戶名
22         String username = request.getParameter("username");
23 
24         if (token != null && token.equalsIgnoreCase(code)){
25             System.out.println("保存到數據庫"+username);
26             response.sendRedirect(request.getContextPath()+"/pages/test/ok.jsp");
27         }else {
28 
29             if (token != null && !token.equalsIgnoreCase(code)){
30                 System.out.println("驗證碼錯誤");
31             }
32 
33             else {
34                 System.out.println("請不要重復提交表單");
35             }
36         }
37     }
38 
39 
40 }
TestServlet.java

  5、以圖書項目為例:

 1 /**
 2      * 處理注冊功能
 3      */
 4     protected void regist(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
 5 
 6         //獲取Session中的驗證碼
 7         String token = (String) req.getSession().getAttribute(KAPTCHA_SESSION_KEY);
 8         //刪除Session中的驗證碼,或者銷毀
 9         req.getSession().removeAttribute(KAPTCHA_SESSION_KEY);
10 
11         //        1、獲取請求參數
12         String username = req.getParameter("username");
13         String password = req.getParameter("password");
14 //        String repwd = req.getParameter("repwd");
15         String email = req.getParameter("email");
16         String verification_code = req.getParameter("verification_code");
17 
18         //使用BeanUtils注入參數
19 //        try {
20 //            User user = new User();
21 //            System.out.println("參數注入前:"+user);
22 //            /**
23 //             * 把所有請求的參數都注入到user對象中
24 //             */
25 //            BeanUtils.populate(user,req.getParameterMap());
26 //            System.out.println("參數注入之后:"+user);
27 //        } catch (Exception e) {
28 //            e.printStackTrace();
29 //        }
30 
31         //使用封裝好的bean工具類來注入參數
32 //        //法一
33 //        User user = new User();
34 //        WebUtils.copyParamToBean(req.getParameterMap(),user);
35 //        //法二
36 //        User user = (User) WebUtils.copyParamToBean(req.getParameterMap(),new User());
37 
38         //法三
39         User user =  WebUtils.copyParamToBean(req.getParameterMap(),new User());
40 
41         //保存用戶信息到Sesion域中,為了注冊完登陸后顯示用戶名
42         req.getSession().setAttribute("user",user);
43 
44 //        2、檢查驗證碼是否正確
45         if (token != null && token.equalsIgnoreCase(verification_code)){
46 
47 //          Ⅰ、正確
48 
49 //              3、檢查用戶名是否可用
50             if(userService.existUsername(username)){
51 //                  ①、不可用
52 //                      跳回注冊頁面
53                 System.out.println("用戶名["+username+"]已存在");
54                 //把錯誤信息和回顯保存到Request域中
55                 req.setAttribute("registError","用戶名已存在");
56                 req.setAttribute("username",username);
57                 req.setAttribute("email",email);
58                 req.getRequestDispatcher("/pages/user/regist.jsp").forward(req,resp);
59             }else{
60 //                  ②、可用
61                 System.out.println("用戶名["+username+"]可用");
62 //                      調用Service保存到數據庫
63                 userService.registUser(new User(null,username,password,email));
64 //                      跳到注冊成功頁面
65                 req.getRequestDispatcher("/pages/user/regist_success.jsp").forward(req,resp);
66             }
67 
68         }else if (token != null && !token.equalsIgnoreCase(verification_code)){
69 //          Ⅱ、錯誤
70 //              跳回注冊頁面
71             System.out.println("驗證碼錯誤["+verification_code+"]錯誤");
72             //把錯誤信息和回顯保存到Request域中
73             req.setAttribute("registError","驗證碼錯誤");
74             req.setAttribute("username",username);
75             req.setAttribute("email",email);
76             req.getRequestDispatcher("/pages/user/regist.jsp").forward(req,resp);
77         }else if (token ==null){
78 
79             //Ⅲ、重復提交
80             //跳回注冊頁面
81             System.out.println("表單重復提交");
82             //把錯誤信息和回顯保存到Request域中
83             req.setAttribute("registError","表單重復提交");
84             req.setAttribute("username",username);
85             req.setAttribute("email",email);
86             req.getRequestDispatcher("/pages/user/regist.jsp").forward(req,resp);
87         }
88     }
regist();
1  <label>驗證碼:</label>
2  <input class="itxt" type="text" name="verification_code" style="width: 100px;" id="code"/>
3  <img alt="" src="kaptcha.jpg" style="float: right; margin-right: 0px;width: 110px;height: 30px;">
4  <br />

   6、點擊驗證碼圖片刷新驗證碼 

 1         <script type="text/javascript">
 2             // 頁面加載完成之后
 3             $(function () {
 4 
 5                 /**
 6                  * 給驗證碼圖片添加單擊事件
 7                  */
 8                 $("#code_img").click(function () {
 9                     //this.src表示img標簽的src屬性,可讀可寫
10                     //加時間戳是為了兼容IE和火狐點擊不重新訪問的問題。有緩存,請求參數一樣的話會先從緩存里找
11                     this.src = "${pageScope.basePath}kaptcha.jpg?=" + new Date();
12                 });
13 
14             });
15 
16         </script>
click刷新事件

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM