一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - java登錄驗證碼實現代碼

java登錄驗證碼實現代碼

2019-10-16 10:26java代碼網 Java教程

這篇文章介紹了java實現登錄驗證碼:用興趣的同學可以參考一下

VerifyCodeServlet.java類:

復制代碼代碼如下:


package com.spring.controller;
import java.awt.Color;         
import java.awt.Font;         
import java.awt.Graphics2D;         
import java.awt.image.BufferedImage;         
import java.util.Random;         
import javax.imageio.ImageIO;         
import javax.servlet.ServletException;         
import javax.servlet.ServletOutputStream;         
import javax.servlet.http.HttpServlet;         
import javax.servlet.http.HttpServletRequest;         
import javax.servlet.http.HttpServletResponse;         
import javax.servlet.http.HttpSession;  
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
public class VerifyCodeServlet extends HttpServlet {
  // 驗證碼圖片的寬度。         
    private int width = 60;         
    // 驗證碼圖片的高度。         
    private int height = 20;         
    // 驗證碼字符個數         
    private int codeCount = 4;         
    private int x = 0;         
    // 字體高度         
    private int fontHeight;         
    private int codeY;         
    char[] codeSequence = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',         
            'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',         
            'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };         
    /**       
     * 初始化驗證圖片屬性       
     */        
    public void initxuan() throws ServletException {         
        // 從web.xml中獲取初始信息         
        // 寬度         
        String strWidth ="80";         
        // 高度         
        String strHeight ="30";         
        // 字符個數         
        String strCodeCount = "4";         
        // 將配置的信息轉換成數值         
        try {         
            if (strWidth != null && strWidth.length() != 0) {         
                width = Integer.parseInt(strWidth);         
            }         
            if (strHeight != null && strHeight.length() != 0) {         
                height = Integer.parseInt(strHeight);         
            }         
            if (strCodeCount != null && strCodeCount.length() != 0) {         
                codeCount = Integer.parseInt(strCodeCount);         
            }         
        } catch (NumberFormatException e) {         
        }         
        x = width / (codeCount + 1);         
        fontHeight = height - 2;         
        codeY = height - 4;         
    }   
    @RequestMapping(value="xuan/verifyCode",method=RequestMethod.GET)
    public void service(HttpServletRequest req, HttpServletResponse resp)         
            throws ServletException, java.io.IOException { 
        initxuan();
        // 定義圖像buffer         
        BufferedImage buffImg = new BufferedImage(width, height,         
                BufferedImage.TYPE_INT_RGB);         
        Graphics2D g = buffImg.createGraphics();         
        // 創建一個隨機數生成器類         
        Random random = new Random();         
        // 將圖像填充為白色         
        g.setColor(Color.WHITE);         
        g.fillRect(0, 0, width, height);         
        // 創建字體,字體的大小應該根據圖片的高度來定。         
        Font font = new Font("Fixedsys", Font.PLAIN, fontHeight);         
        // 設置字體。         
        g.setFont(font);         
        // 畫邊框。         
        g.setColor(Color.BLACK);         
        g.drawRect(0, 0, width - 1, height - 1);         
        // 隨機產生160條干擾線,使圖象中的認證碼不易被其它程序探測到。         
        g.setColor(Color.BLACK);         
        for (int i = 0; i < 10; i++) {         
            int x = random.nextInt(width);         
            int y = random.nextInt(height);         
            int xl = random.nextInt(12);         
            int yl = random.nextInt(12);         
            g.drawLine(x, y, x + xl, y + yl);         
        }         
        // randomCode用于保存隨機產生的驗證碼,以便用戶登錄后進行驗證。         
        StringBuffer randomCode = new StringBuffer();         
        int red = 0, green = 0, blue = 0;         
        // 隨機產生codeCount數字的驗證碼。         
        for (int i = 0; i < codeCount; i++) {         
            // 得到隨機產生的驗證碼數字。         
            String strRand = String.valueOf(codeSequence[random.nextInt(36)]);         
            // 產生隨機的顏色分量來構造顏色值,這樣輸出的每位數字的顏色值都將不同。         
            red = random.nextInt(255);         
            green = random.nextInt(255);         
            blue = random.nextInt(255);         
            // 用隨機產生的顏色將驗證碼繪制到圖像中。         
            g.setColor(new Color(red, green, blue));         
            g.drawString(strRand, (i + 1) * x, codeY);         
            // 將產生的四個隨機數組合在一起。         
            randomCode.append(strRand);         
        }         
        // 將四位數字的驗證碼保存到Session中。         
        HttpSession session = req.getSession();         
        session.setAttribute("validateCode", randomCode.toString());         
        // 禁止圖像緩存。         
        resp.setHeader("Pragma", "no-cache");         
        resp.setHeader("Cache-Control", "no-cache");         
        resp.setDateHeader("Expires", 0);         
        resp.setContentType("image/jpeg");         
        // 將圖像輸出到Servlet輸出流中。         
        ServletOutputStream sos = resp.getOutputStream();         
        ImageIO.write(buffImg, "jpeg", sos);         
        sos.close();         
    }         
}


ResultServlet.java:

復制代碼代碼如下:


package com.spring.controller;
import java.io.IOException;         
import java.io.PrintWriter;         
import javax.servlet.ServletException;                
import javax.servlet.http.HttpServletRequest;         
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
public class ResultServlet {
     @RequestMapping(value="resultServlet/validateCode",method=RequestMethod.POST)
     public void doPost(HttpServletRequest request, HttpServletResponse response)         
             throws ServletException, IOException {         
         response.setContentType("text/html;charset=utf-8");         
         String validateC = (String) request.getSession().getAttribute("validateCode");         
         String veryCode = request.getParameter("c");         
         PrintWriter out = response.getWriter();         
         if(veryCode==null||"".equals(veryCode)){         
             out.println("驗證碼為空");         
         }else{         
             if(validateC.equals(veryCode)){         
                 out.println("驗證碼正確");         
             }else{         
                 out.println("驗證碼錯誤");         
             }         
         }         
         out.flush();         
         out.close();         
     }         
}


jsp頁面:

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"        
  2.     pageEncoding="UTF-8"%>        
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">        
  4. <html>        
  5.     <head>        
  6.         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"
  7.         <title>test verify code</title>   
  8.     </head>   
  9.     <body>        
  10.         <input id="veryCode" name="veryCode" type="text"/>        
  11.         <img id="imgObj"  alt="" src="xuan/verifyCode"/>        
  12.         <a href="#" onclick="changeImg()">換一張</a>        
  13.         <input type="button" value="驗證" onclick="isRightCode()"/>        
  14.         <div id="info"></div>        
  15.     </body>        
  16. </html> 
  17. <script type="text/javascript"
  18.  function changeImg(){      
  19.     var imgSrc = $("#imgObj");      
  20.     var src = imgSrc.attr("src");      
  21.     imgSrc.attr("src",chgUrl(src));      
  22. }      
  23. //時間戳      
  24. //為了使每次生成圖片不一致,即不讓瀏覽器讀緩存,所以需要加上時間戳      
  25. function chgUrl(url){      
  26.     var timestamp = (new Date()).valueOf();      
  27.     urlurl = url.substring(0,17);      
  28.     if((url.indexOf("&")>=0)){      
  29.         urlurl = url + "×tamp=" + timestamp;      
  30.     }else{      
  31.         urlurl = url + "?timestamp=" + timestamp;      
  32.     }      
  33.     return url;      
  34. }      
  35. function isRightCode(){      
  36.     var code = $("#veryCode").attr("value");      
  37.     code = "c=" + code;      
  38.     $.ajax({      
  39.         type:"POST",      
  40.         url:"resultServlet/validateCode",      
  41.         data:code,      
  42.         success:callback      
  43.     });      
  44. }      
  45. function callback(data){      
  46.     $("#info").html(data);      
  47. }   
  48. </script>   


運行效果:
java登錄驗證碼實現代碼

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲精品久久久久久婷婷 | 丰满大乳欲妇三级k8 | 精品亚洲欧美中文字幕在线看 | b站免费| 二次元美女脱裤子让男人桶爽 | 免费二区| 成人亚洲精品一区 | 免费观看欧美一级高清 | 午夜一级毛片看看 | 欧美日韩国产精品自在自线 | 手机看片日韩1024你懂的首页 | 学生小泬无遮挡女HD | 男女真实无遮挡xx00动态图软件 | 秋葵丝瓜茄子草莓榴莲樱桃 | 国模孕妇季玥337p人体 | 欧美一区二区三区四区在线观看 | 日本一区二区视频在线 | a一级毛片录像带 录像片 | 成版人快猫永久破解版 | 青丝视频免费版在线看 | 女人麻豆国产香蕉久久精品 | 激情亚洲天堂 | jizz中国jizz老师水多 | 日本热妇 | 青青热久麻豆精品视频在线观看 | 奇米影视先锋 | 精品91自产拍在线观看99re | 日本欧美一二三区色视频 | 亚洲天堂伦理 | 超级乱淫 不详 | 妇伦小说 | 91手机在线 | 天天色天天色天天色 | 日本一卡=卡三卡免费 | 91se精品免费观看 | 俺去俺来也www色官网免费的 | 99热人人 | 日本不卡视频免费的 | 国产精品一区牛牛影视 | 国产区香蕉精品系列在线观看不卡 | 亚洲444777KKK在线观看 |