Java后端快速生成驗證碼

Hutool是一個小而全的Java工具類庫,它提供了很多實用的工具類,包括但不限于日期處理、加密解密、文件操作、反射操作、HTTP客戶端等。

核心工具類:CaptchaUtil,CaptchaUtil 是 Hutool 提供的一個工具類,用于創建各種類型的驗證碼。它提供了靜態工廠方法,幫助我們快速生成不同風格的驗證碼。

POM依賴

<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.3</version>
</dependency>

CaptchaUtil

package cn.hutool.captcha;/*** 圖形驗證碼工具*/
public class CaptchaUtil {/*** 創建線干擾的驗證碼,默認5位驗證碼,150條干擾線* @param width  圖片寬* @param height 圖片高*/public static LineCaptcha createLineCaptcha(int width, int height) {return new LineCaptcha(width, height);}/*** 創建線干擾的驗證碼* @param width     圖片寬* @param height    圖片高* @param codeCount 字符個數* @param lineCount 干擾線條數*/public static LineCaptcha createLineCaptcha(int width, int height, int codeCount, int lineCount) {return new LineCaptcha(width, height, codeCount, lineCount);}/*** 創建圓圈干擾的驗證碼,默認5位驗證碼,15個干擾圈* @param width  圖片寬* @param height 圖片高*/public static CircleCaptcha createCircleCaptcha(int width, int height) {return new CircleCaptcha(width, height);}/*** 創建圓圈干擾的驗證碼* @param width       圖片寬* @param height      圖片高* @param codeCount   字符個數* @param circleCount 干擾圓圈條數*/public static CircleCaptcha createCircleCaptcha(int width, int height, int codeCount, int circleCount) {return new CircleCaptcha(width, height, codeCount, circleCount);}/*** 創建扭曲干擾的驗證碼,默認5位驗證碼* @param width  圖片寬* @param height 圖片高*/public static ShearCaptcha createShearCaptcha(int width, int height) {return new ShearCaptcha(width, height);}/*** 創建扭曲干擾的驗證碼,默認5位驗證碼* @param width     圖片寬* @param height    圖片高* @param codeCount 字符個數* @param thickness 干擾線寬度*/public static ShearCaptcha createShearCaptcha(int width, int height, int codeCount, int thickness) {return new ShearCaptcha(width, height, codeCount, thickness);}/*** 創建GIF驗證碼* @param width 寬* @param height 高*/public static GifCaptcha createGifCaptcha(int width, int height) {return new GifCaptcha(width, height);}/*** 創建GIF驗證碼* @param width 寬* @param height 高* @param codeCount 字符個數*/public static GifCaptcha createGifCaptcha(int width, int height, int codeCount) {return new GifCaptcha(width, height, codeCount);}
}

前端頁面

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>登錄</title>
</head>
<body><form action="/login" method="post">用戶名:<input type="text" name="username"><br>密碼:<input type="password" name="password"><br>驗證碼:<input type="text" name="verificationCode"><img src="/verification-code/getImage"><input type="submit" value="登錄"></form>
</body>
</html>

后端代碼

@Controller
@RequestMapping("/verification-code")
@Slf4j
public class VerificationCodeController {@GetMapping("/getImage")public void generateCaptcha(HttpServletRequest request, HttpServletResponse response) throws IOException {// 1. 生成驗證碼圖片// 圖片寬:90 圖片高:30 字符個數:4 干擾線寬度:3ICaptcha captcha = CaptchaUtil.createShearCaptcha(90, 30, 4, 3);// 2. 將生成的驗證碼(文本)保存到 Redis / Session 中// 存入Redis / Session后,在后續可通過攔截器進行校驗request.getSession().setAttribute("verificationCode", captcha.getCode());// 3. 設置響應類型為 JPEG 圖片response.setContentType("image/jpeg");// 4. 回寫captcha.write(response.getOutputStream());}
}

驗證碼效果

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/82916.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/82916.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/82916.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

sql 備份表a數據到表b

備份表a數據到表b mysql CREATE TABLE sys_dict_240702 LIKE sys_dict;INSERT INTO sys_dict_240702 SELECT * FROM sys_dict;mssql select * into t_Dict_240702 from t_Dict

2.4GHz無線通信芯片選型指南:集成SOC與低功耗方案解析

今天給大家分享幾款2.4GHz無線通信芯片方案&#xff1a; 一、集成SOC芯片方案 XL2407P&#xff08;芯嶺技術&#xff09; 集成射頻收發機和微控制器&#xff08;如九齊NY8A054E&#xff09; 支持一對多組網和自動重傳 發射功率8dBm&#xff0c;接收靈敏度-96.5dBm&#xff08…

Tomcat與純 Java Socket 實現遠程通信的區別

Servlet 容器??&#xff08;如 Tomcat&#xff09; 是一個管理 Servlet 生命周期的運行環境&#xff0c;主要功能包括&#xff1a; ??協議解析??&#xff1a;自動處理 HTTP 請求/響應的底層協議&#xff08;如報文頭解析、狀態碼生成&#xff09;&#xff1b; ??線程…

[超級簡單]講解如何用PHP實現LINE Pay API!

在 PHP 中實現 LINE Pay API 之前我應該??做哪些準備&#xff1f;如何在 PHP 中實現 LINE Pay API&#xff1f; 目錄 [前提] 環境使用 PHP 實現 LINE Pay API 的準備工作使用 PHP 實現 LINE Pay API概括 [前提] 環境 這次我們將使用SandBox環境&#xff08;測試環境&a…

centos7.x下,使用寶塔進行主從復制的原理和實踐

操作原理&#xff1a; 一、主庫配置 1.修改 MySQL 配置文件 # 編輯主庫配置文件&#xff08;路徑根據實際系統可能不同&#xff09; vim /etc/my.cnf # 添加以下配置 [mysqld] server-id 1 # 唯一 ID&#xff0c;主庫設置為 1 log-bin mysql-bin …

從零實現基于Transformer的英譯漢任務

1. model.py&#xff08;用的是上一篇文章的代碼&#xff1a;從0搭建Transformer-CSDN博客&#xff09; import torch import torch.nn as nn import mathclass PositionalEncoding(nn.Module):def __init__ (self, d_model, dropout, max_len5000):super(PositionalEncoding,…

c#建筑行業財務流水賬系統軟件可上傳記賬憑證財務管理系統簽核功能

# financial_建筑行業 建筑行業財務流水賬系統軟件可上傳記賬憑證財務管理系統簽核功能 # 開發背景 軟件是給岳陽客戶定制開發一款建筑行業流水賬財務軟件。提供工程簽證單、施工日志、人員出勤表等信息記錄。 # 財務管理系統功能描述 1.可以自行設置記賬科目&#xff0c;做憑…

MySQL 8.0 OCP 1Z0-908 題目解析(2)

題目005 Choose two. Which two actions can obtain information about deadlocks? □ A) Run the SHOW ENGINE INNODB MUTEX command from the mysql client. □ B) Enable the innodb_status_output_locks global parameter. □ C) Enable the innodb_print_all_deadlock…

XA協議和Tcc

基于 XA 協議的兩階段提交 (2PC)。這是一種分布式事務協議&#xff0c;旨在保證在多個參與者&#xff08;通常是不同的數據庫或資源管理器&#xff09;共同參與的事務中&#xff0c;所有參與者要么都提交事務&#xff0c;要么都回滾事務&#xff0c;從而維護數據的一致性。 你…

數據分析-圖2-圖像對象設置參數與子圖

from matplotlib import pyplot as mp mp.figure(A figure,facecolorgray) mp.plot([0,1],[1,2]) mp.figure(B figure,facecolorlightgray) mp.plot([1,2],[2,1]) #如果figure中標題已創建&#xff0c;則不會新建窗口&#xff0c; #而是將舊窗口設置為當前窗口 mp.figure(A fig…

跳轉語句:break、continue、goto -《Go語言實戰指南》

在控制流程中&#xff0c;我們有時需要跳出當前循環或跳過當前步驟&#xff0c;甚至直接跳轉到指定位置。Go 提供了三種基本跳轉語句&#xff1a; ? break&#xff1a;跳出當前 for、switch 或 select。? continue&#xff1a;跳過本輪循環&#xff0c;進入下一輪。? goto&a…

Linux中find命令用法核心要點提煉

大家好&#xff0c;歡迎來到程序視點&#xff01;我是你們的老朋友.小二&#xff01; 以下是針對Linux中find命令用法的核心要點提煉&#xff1a; 基礎語法結構 find [路徑] [選項] [操作]路徑&#xff1a;查找目錄&#xff08;.表當前目錄&#xff0c;/表根目錄&#xff09;…

MQTT協議詳解:物聯網通信的輕量級解決方案

MQTT協議詳解&#xff1a;物聯網通信的輕量級解決方案 引言 在物聯網(IoT)快速發展的今天&#xff0c;設備間高效可靠的通信變得至關重要。MQTT(Message Queuing Telemetry Transport)作為一種輕量級的發布/訂閱協議&#xff0c;已成為物聯網通信的首選解決方案。本文將深入探…

list基礎用法

list基礎用法 1.list的訪問就不能用下標[]了,用迭代器2.emplace_back()幾乎是與push_back()用法一致&#xff0c;但也有差別3.insert(),erase()的用法4.reverse()5.排序6.合并7.unique()&#xff08;去重&#xff09;8.splice剪切再粘貼 1.list的訪問就不能用下標[]了,用迭代器…

2025年第十六屆藍橋杯大賽軟件賽C/C++大學B組題解

第十六屆藍橋杯大賽軟件賽C/C大學B組題解 試題A: 移動距離 問題描述 小明初始在二維平面的原點&#xff0c;他想前往坐標(233,666)。在移動過程中&#xff0c;他只能采用以下兩種移動方式&#xff0c;并且這兩種移動方式可以交替、不限次數地使用&#xff1a; 水平向右移動…

BGP實驗練習2

需求&#xff1a; 1.AS1存在兩個環回&#xff0c;一個地址為192.168.1.0/24&#xff0c;該地址不能再任何協議中宣告 AS3存在兩個環回&#xff0c;該地址不能再任何協議中宣告 AS1還有一個環回地址為10.1.1.0/24&#xff0c;AS3另一個環回地址是11.1.1.0/24 最終要求這兩…

【溫濕度物聯網】記錄1:寄存器配置

一&#xff0c;及哦地址 基地址base的定義&#xff1a; ↓ 定義完是這個&#xff1a; GPIOA的地址就是以上的代表 2寄存器&#xff1a; 通過bsrr來改變odr寄存器&#xff0c;左移16位就是把0-15位的給移到高位的保留區&#xff0c;這樣就歸零了 3&#xff0c;項目寄存器實操…

MCP項目實例 - client sever交互

1. 項目概述 項目目標 構建一個本地智能輿論分析系統。 利用自然語言處理和多工具協作&#xff0c;實現用戶查詢意圖的自動理解。 進行新聞檢索、情緒分析、結構化輸出和郵件推送。 系統流程 用戶查詢&#xff1a;用戶輸入查詢請求。 提取關鍵詞&#xff1a;從用戶查詢中…

運維體系架構規劃

運維體系架構規劃是一個系統性工程&#xff0c;旨在構建高效、穩定、安全的運維體系&#xff0c;保障業務系統的持續運行。下面從規劃目標、核心模塊、實施步驟等方面進行詳細闡述&#xff1a; 一、規劃目標 高可用性&#xff1a;確保業務系統 724 小時不間斷運行&#xff0c…

zst-2001 上午題-歷年真題 計算機網絡(16個內容)

網絡設備 計算機網絡 - 第1題 ac 計算機網絡 - 第2題 d 計算機網絡 - 第3題 集線器不能隔離廣播域和沖突域&#xff0c;所以集線器就1個廣播域和沖突域 交換機就是那么的炫&#xff0c;可以隔離沖突域&#xff0c;有4給沖突域&#xff0c;但不能隔離廣播域&#xf…