您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關利用Java實現一個驗證碼功能,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
要導入servlet-api.jar包
創建驗證碼的Util工具類:
先創建圖片并生成隨機的驗證碼字母
設置圖片的底色,并用setFont函數將驗證碼畫在圖片上,如果想讓驗證碼難一點,可以添加for循環的代碼給圖片增加旋轉角度
給驗證碼增加干擾線,提高安全性
設置邊框
創建VerifyPic的servlet,通過Util類獲取代碼,并存入session中,然后輸送去前端頁面
前端頁面驗證碼如下:
完整Util工具類代碼如下:
package com.sport.util; import java.awt.*; import java.awt.image.BufferedImage; import java.util.HashMap; import java.util.Map; public class VerifyUtil { public static Map<String, Object> generateVerify(){ //創建一張圖片 BufferedImage verifyPic = new BufferedImage(120,40,BufferedImage.TYPE_3BYTE_BGR); //通過圖片獲取畫筆 Graphics2D g = verifyPic.createGraphics(); //準備一個字母+數字的字典 String letters = "23456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; //規定驗證碼的位數 int verifyLength = 4; //生成隨機驗證碼 String verifyCode = ""; //循環取值 for(int i=0; i<verifyLength; i++) { verifyCode +=letters.charAt((int)(Math.random()*letters.length())); } //將圖片的底板由黑變白 g.setColor(Color.white); g.fillRect(0, 0, 120, 40); //將驗證碼畫在圖片之上 g.setFont(new Font("微軟雅黑",Font.BOLD, 24)); for (int i = 0; i < verifyLength; i++) { //隨機產生一個角度 double theta = Math.random() * Math.PI / 4 * ((int)(Math.random()*2) == 0?1:-1); //產生偏轉 g.rotate(theta, 24+i*22, 20); //每畫一個字幕之前都隨機給一個顏色 g.setColor(new Color((int)(Math.random()*256), (int)(Math.random()*256), (int)(Math.random()*256))); g.drawString(verifyCode.charAt(i)+"", 20+i*22 , 26); //回正 g.rotate(-theta, 24+i*22, 20); } //加入干擾線 for (int i = 0; i < 5; i++) { //給隨機顏色 g.setColor(new Color((int)(Math.random()*256), (int)(Math.random()*256), (int)(Math.random()*256))); //畫線 g.drawLine((int)(Math.random()*120), (int)(Math.random()*40), (int)(Math.random()*120), (int)(Math.random()*40)); } //設置邊框顏色 g.setColor(Color.black); //給驗證碼一個外邊框 g.drawRect(0, 0, 118, 38); //將驗證碼和圖片一起存入map Map<String, Object> data = new HashMap<String, Object>(); data.put("verifyCode", verifyCode); data.put("verifyPic", verifyPic); return data; } }
完整VerifyPic的代碼如下:
package com.sport.servlet; import com.sport.util.VerifyUtil; import javax.imageio.ImageIO; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.awt.image.BufferedImage; import java.io.IOException; import java.util.Map; @WebServlet("/VerifyPic") public class VerifyPic extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Map<String, Object> data = VerifyUtil.generateVerify(); //獲取驗證碼 String verifyCode = (String) data.get("verifyCode"); //將驗證碼存入session HttpSession session = request.getSession(); session.setAttribute("verifyCode", verifyCode); //獲取圖片 BufferedImage verifyPic = (BufferedImage) data.get("verifyPic"); //輸出圖片給前端,使用工具類ImageIO ImageIO.write(verifyPic, "jpg", response.getOutputStream()); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
看完上述內容,你們對利用Java實現一個驗證碼功能有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。