最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java制作驗(yàn)證碼的完整實(shí)例代碼

 更新時間:2020年11月06日 12:09:16   作者:不會禿頭的猿  
這篇文章主要給大家介紹了關(guān)于Java制作驗(yàn)證碼的完整實(shí)例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

JAVA代碼制作驗(yàn)證碼,可用于注冊等功能頁面

要導(dǎo)入servlet-api.jar包

創(chuàng)建驗(yàn)證碼的Util工具類:

先創(chuàng)建圖片并生成隨機(jī)的驗(yàn)證碼字母

設(shè)置圖片的底色,并用setFont函數(shù)將驗(yàn)證碼畫在圖片上,如果想讓驗(yàn)證碼難一點(diǎn),可以添加for循環(huán)的代碼給圖片增加旋轉(zhuǎn)角度

給驗(yàn)證碼增加干擾線,提高安全性

設(shè)置邊框

創(chuàng)建VerifyPic的servlet,通過Util類獲取代碼,并存入session中,然后輸送去前端頁面

實(shí)打

前端頁面驗(yàn)證碼如下:

完整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(){
  //創(chuàng)建一張圖片
  BufferedImage verifyPic = new BufferedImage(120,40,BufferedImage.TYPE_3BYTE_BGR);
  //通過圖片獲取畫筆
  Graphics2D g = verifyPic.createGraphics();
  //準(zhǔn)備一個字母+數(shù)字的字典
  String letters = "23456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
  //規(guī)定驗(yàn)證碼的位數(shù)
  int verifyLength = 4;
  //生成隨機(jī)驗(yàn)證碼
  String verifyCode = "";
  //循環(huán)取值
  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);
  //將驗(yàn)證碼畫在圖片之上
  g.setFont(new Font("微軟雅黑",Font.BOLD, 24));
  for (int i = 0; i < verifyLength; i++) {
   //隨機(jī)產(chǎn)生一個角度
   double theta = Math.random() * Math.PI / 4 * ((int)(Math.random()*2) == 0?1:-1);
   //產(chǎn)生偏轉(zhuǎn)
   g.rotate(theta, 24+i*22, 20);
   //每畫一個字幕之前都隨機(jī)給一個顏色
   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++) {
   //給隨機(jī)顏色
   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));
  }
  //設(shè)置邊框顏色
  g.setColor(Color.black);
  //給驗(yàn)證碼一個外邊框
  g.drawRect(0, 0, 118, 38);

  //將驗(yàn)證碼和圖片一起存入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();
  //獲取驗(yàn)證碼
  String verifyCode = (String) data.get("verifyCode");
  //將驗(yàn)證碼存入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);
 }
}

總結(jié)

到此這篇關(guān)于Java制作驗(yàn)證碼的完整實(shí)例代碼的文章就介紹到這了,更多相關(guān)Java驗(yàn)證碼完整代碼內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring中DeferredResult異步處理

    Spring中DeferredResult異步處理

    DeferredResult是Spring中處理異步請求的強(qiáng)大工具,可以幫助改善應(yīng)用程序的性能和用戶體驗(yàn),本文就來介紹一下Spring中DeferredResult異步處理,感興趣的可以了解一下
    2023-12-12
  • springMVC向Controller傳值出現(xiàn)中文亂碼的解決方案

    springMVC向Controller傳值出現(xiàn)中文亂碼的解決方案

    這篇文章主要介紹了springMVC向Controller傳值出現(xiàn)中文亂碼的解決方案,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • 微服務(wù)分布式架構(gòu)實(shí)現(xiàn)日志鏈路跟蹤的方法

    微服務(wù)分布式架構(gòu)實(shí)現(xiàn)日志鏈路跟蹤的方法

    在現(xiàn)有的系統(tǒng)中,由于大量的其他用戶/其他線程的日志也一起輸出穿行其中導(dǎo)致很難篩選出指定請求的全部相關(guān)日志。那我們?nèi)绾蝸硖幚砟??帶著這個問題一起通過本文學(xué)習(xí)下吧
    2021-08-08
  • Java實(shí)現(xiàn)醫(yī)院管理系統(tǒng)

    Java實(shí)現(xiàn)醫(yī)院管理系統(tǒng)

    這篇文章主要介為大家詳細(xì)紹了Java實(shí)現(xiàn)醫(yī)院管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • Spring boot 使用JdbcTemplate訪問數(shù)據(jù)庫

    Spring boot 使用JdbcTemplate訪問數(shù)據(jù)庫

    SpringBoot 是為了簡化 Spring 應(yīng)用的創(chuàng)建、運(yùn)行、調(diào)試、部署等一系列問題而誕生的產(chǎn)物。本文重點(diǎn)給大家介紹spring boot 使用JdbcTemplate訪問數(shù)據(jù)庫,需要的朋友可以參考下
    2018-05-05
  • MyBatis類型轉(zhuǎn)換模塊的實(shí)現(xiàn)

    MyBatis類型轉(zhuǎn)換模塊的實(shí)現(xiàn)

    MyBatis是一個持久層框架ORM框架,實(shí)現(xiàn)數(shù)據(jù)庫中數(shù)據(jù)和Java對象中的屬性的雙向映射,那么不可避免的就會碰到類型轉(zhuǎn)換的問題,本文主要介紹了MyBatis類型轉(zhuǎn)換模塊的實(shí)現(xiàn),感興趣的可以了解一下
    2023-09-09
  • Java字母加數(shù)字組合比較大小

    Java字母加數(shù)字組合比較大小

    這篇文章主要通過實(shí)現(xiàn)Comarable接口來比較(如"a20"和"a9"這種)字符串的大小,希望能給大家做一個參考。
    2016-06-06
  • Java中精確的浮點(diǎn)運(yùn)算操作示例

    Java中精確的浮點(diǎn)運(yùn)算操作示例

    這篇文章主要介紹了Java中精確的浮點(diǎn)運(yùn)算操作方法,結(jié)合具體實(shí)例形式分析了java浮點(diǎn)數(shù)運(yùn)算的相關(guān)函數(shù)、使用技巧與注意事項(xiàng),需要的朋友可以參考下
    2017-06-06
  • mybatis-plus批量插入優(yōu)化方式

    mybatis-plus批量插入優(yōu)化方式

    MyBatis-Plus的saveBatch()方法默認(rèn)是單條插入,通過在JDBC URL添加rewriteBatchedStatements=true參數(shù)啟用批量插入,官方提供的sql注入器可自定義方法,如InsertBatchSomeColumn實(shí)現(xiàn)真批量插入,但存在單次插入數(shù)據(jù)量過大問題,可通過分批插入優(yōu)化,避免超出MySQL限制
    2024-09-09
  • java給釘釘郵箱發(fā)送郵件功能實(shí)現(xiàn)

    java給釘釘郵箱發(fā)送郵件功能實(shí)現(xiàn)

    文章介紹了如何使用Java給釘釘郵箱發(fā)送郵件,包括開通POP和IMAP、引入pom、邏輯處理、直接添加前端傳來的MultipartFile、添加多個附件以及給多個郵箱發(fā)送郵件等步驟,感興趣的朋友一起看看吧
    2025-02-02

最新評論

类乌齐县| 远安县| 鹤壁市| 泽普县| 吴堡县| 项城市| 聂拉木县| 东乡县| 连云港市| 石城县| 安多县| 连江县| 白银市| 天峨县| 平陆县| 乡宁县| 佛学| 福清市| 晋州市| 新余市| 民权县| 西安市| 平利县| 南华县| 五台县| 小金县| 禹州市| 三门县| 临泉县| 孝义市| 乌什县| 襄城县| 米林县| 天长市| 荔浦县| 沾化县| 台南县| 新龙县| 海安县| 延安市| 闵行区|