springboot生成圖片驗證碼(借鑒并分析)

目錄

  • 一、CaptchaUtil代碼展示
  • 二、CaptchaController 代碼展示

一、CaptchaUtil代碼展示

package com.minster.yanapi.utils;import com.google.code.kaptcha.impl.DefaultKaptcha;import com.google.code.kaptcha.util.Config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import java.util.Properties;@Configuration
public class CaptchaUtil{@Beanpublic DefaultKaptcha getDefaultKaptcha() {DefaultKaptcha defaultKaptcha = new DefaultKaptcha();Properties properties = new Properties();properties.setProperty("kaptcha.border", "yes");properties.setProperty("kaptcha.border.color", "105,179,90");properties.setProperty("kaptcha.border.thickness","1");properties.setProperty("kaptcha.session.key", "code");properties.setProperty("kaptcha.textproducer.font.color", "blue");properties.setProperty("kaptcha.textproducer.font.names", "宋體,楷體,微軟雅 黑");properties.setProperty("kaptcha.textproducer.font.size", "30");properties.setProperty("kaptcha.textproducer.char.length", "4");properties.setProperty("kaptcha.textproducer.char.space", "4");properties.setProperty("kaptcha.image.width", "100");properties.setProperty("kaptcha.image.height", "40");Config config = new Config(properties);defaultKaptcha.setConfig(config);return defaultKaptcha;}}

這段代碼是一個基于Spring框架的驗證碼配置類,主要用于配置驗證碼生成器的屬性和參數。

  1. @Configuration 注解標識這是一個配置類,用于定義 Spring Bean。

  2. CaptchaUtil 類定義了一個名為 getDefaultKaptcha 的方法,該方法使用 @Bean 注解,表示它會被Spring容器管理,并作為一個Bean提供。

  3. getDefaultKaptcha 方法中,創建了 DefaultKaptcha 類的實例,這是一個基于Google Kaptcha庫的驗證碼生成器。

  4. 通過 Properties 對象配置驗證碼生成器的各種屬性。以下是一些主要的配置項:

    • kaptcha.border: 是否有邊框,這里設置為 “yes”。
    • kaptcha.border.color: 邊框顏色,這里設置為 “105,179,90”。
    • kaptcha.session.key: 存儲驗證碼的 session key,這里設置為 “code”。
    • kaptcha.textproducer.font.color: 驗證碼文本字符顏色,這里設置為 “blue”。
    • kaptcha.textproducer.font.names: 字體樣式,這里設置為 “宋體,楷體,微軟雅黑”。
    • kaptcha.textproducer.font.size: 字體大小,這里設置為 “30”。
    • kaptcha.textproducer.char.length: 驗證碼字符長度,這里設置為 “4”。
    • kaptcha.textproducer.char.space: 字符間距,這里設置為 “4”。
    • kaptcha.image.width: 驗證碼圖片寬度,這里設置為 “100”。
    • kaptcha.image.height: 驗證碼圖片高度,這里設置為 “40”。
  5. 創建一個 Config 對象,并將之前配置的 Properties 對象傳遞給它,用于構建驗證碼生成器的配置。

  6. 將配置好的 Config 對象設置到 DefaultKaptcha 實例中。

  7. 最后,返回配置好的 DefaultKaptcha 實例。

總體來說,這個配置類的作用是創建和配置一個用于生成驗證碼的 DefaultKaptcha Bean,并通過Spring容器進行管理。該驗證碼生成器的外觀和行為由一系列屬性值定義,這些屬性值可以在配置中進行調整,以滿足具體的需求。

二、CaptchaController 代碼展示


@RestController
@RequestMapping("/code")
public class CaptchaController {@Autowiredprivate DefaultKaptcha defaultKaptcha;@GetMapping( "/captcha")public void captcha(HttpServletRequest request, HttpServletResponse response){//定義response輸出類型為image/jpegresponse.setDateHeader("Expires",0);response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");response.addHeader("Cache-Control", "post-check=0, pre-check=0");response.setHeader("Pragma", "no-cache");response.setContentType("image/jpeg");//---------------------------生成驗證碼----------------------//獲取驗證碼文本內容String text = defaultKaptcha.createText();System.out.println("驗證碼:  " + text);//將驗證碼放到session中request.getSession().setAttribute("captcha",text);//根據文本內容創建圖形驗證碼BufferedImage image = defaultKaptcha.createImage(text);ServletOutputStream outputStream = null;try {outputStream = response.getOutputStream();//輸出流輸出圖片,格式為jpgImageIO.write(image,"jpg",outputStream);outputStream.flush();} catch (IOException e) {e.printStackTrace();}finally {if (outputStream != null){try {outputStream.close();} catch (IOException e) {e.printStackTrace();}}}}
}

上述代碼是一個基于Spring框架的Java類,使用@RestController注解標識為一個RESTful風格的控制器,處理與驗證碼相關的HTTP請求。以下是對代碼的詳細分析:

  1. 類注解:

    • @RestController: 表示這是一個控制器類,并且所有方法都以JSON格式返回響應。
  2. 類聲明:

    • @RequestMapping("/code"): 定義了類級別的請求映射,表示處理所有以"/code"開頭的請求。
  3. 字段注入:

    • private DefaultKaptcha defaultKaptcha: 使用@Autowired注解進行依賴注入,注入了一個名為defaultKaptcha的DefaultKaptcha類型的Bean。
  4. 方法定義:

    • @GetMapping("/captcha"): 處理HTTP GET請求,映射路徑為"/code/captcha"。
    • public void captcha(HttpServletRequest request, HttpServletResponse response): 處理驗證碼請求的方法,接受HttpServletRequest和HttpServletResponse作為參數。
  5. 驗證碼生成與輸出:

    • 設置響應頭,禁用緩存,確保驗證碼每次都是新的。
    • 獲取驗證碼文本內容:String text = defaultKaptcha.createText();
    • 將驗證碼文本放入Session中:request.getSession().setAttribute("captcha", text);
    • 創建圖形驗證碼:BufferedImage image = defaultKaptcha.createImage(text);
    • 獲取輸出流:ServletOutputStream outputStream = response.getOutputStream();
    • 將驗證碼圖片以JPEG格式寫入輸出流:ImageIO.write(image, "jpg", outputStream);
    • 關閉輸出流。
  6. 異常處理:

    • 在輸出流操作中使用了try-catch塊捕獲IOException,并打印異常信息。

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

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

相關文章

MMDetection3D v1.3.0安裝教程

MMDetection3D v1.3.0安裝教程 1. 系統環境2. 安裝2.1 基本環境安裝2.2 調整具體版本2.3 驗證2.4 安裝MinkowskiEngine和TorchSparse 3. 最終環境配置 根據 v1.3.0版本官方手冊測試后的安裝配置,親測可行。 1. 系統環境 項目版本日期Ubuntu18.04.06 LTS-顯卡RTX 2…

曾桂華:車載座艙音頻體驗探究與思考| 演講嘉賓公布

智能車載音頻 I 分論壇將于3月27日同期舉辦! 我們正站在一個前所未有的科技革新的交匯點上,重塑我們出行體驗的變革正在悄然發生。當人工智能的磅礴力量與車載音頻相交融,智慧、便捷與未來的探索之旅正式揚帆起航。 在駕駛的旅途中&#xff0…

安裝 Distribution Registry

Distribution Registry是由容器部署,所有前提是需要安裝docker 參考文檔:https://docs.docker.com/engine/install/centos/ Registry 官網文檔 https://distribution.github.io/distribution/ 安裝Registry倉庫 docker run -d -p 5000:5000 --restartalw…

通過css修改video標簽的原生樣式

通過css修改video標簽的原生樣式 描述實現結果 描述 修改video標簽的原生樣式 實現 在控制臺中打開設置,勾選顯示用戶代理 shadow DOM,就可以審查video標簽的內部樣式了 箭頭處標出來的就是shodow DOM的內容,這些內容正常不可見的&#x…

MySQL 用了哪種默認隔離級別,實現原理是什么?

MySQL 的默認隔離級別是 RR - 可重復讀,可以通過命令來查看 MySQL 中的默認隔離級別。 RR - 可重復讀是基于多版本并發控制(Multi-Version Concurrency Control,MVCC )實現的。MVCC,在讀取數據時通過一種類似快照的方…

視覺三維重建colmap框架的現狀與未來

注:該文章首發3D視覺工坊,鏈接如下3D視覺工坊 前言 眾所周知,三維重建的發展已經進入了穩定期,尤其是離線方案的發展幾乎處于停滯期,在各大論刊上也很少見到傳統sfmmvs亮眼的文章。這也不難理解,傳統的多視…

MYSQL 解釋器小記

解釋器的結果通常通過上述表格展示: 1. select_type 表示查詢的類型 simple: 表示簡單的選擇查詢,沒有子查詢或連接操作 primary:表示主查詢,通常是最外層的查詢 subquery :表示子查詢,在主查詢中嵌套的查詢 derived: 表示派…

【王道數據結構】【chapter8排序】【P360t2】

試編寫一個算法,使之能夠在數組L[1……n]中找出第k小的元素(即從小到大排序后處于第k個位置的元素)(可以直接采用排序,但下面的排序的代碼只是為了方便核對是不是第k小的元素,k從0開始計算) #in…

出海手游收入一路高歌,營銷上如何成功?

出海手游收入一路高歌,營銷上如何成功? 以RPG和SLG為代表的中重度游戲一直是國內廠商在海外市場的傳統優勢品類,因為它們具有較高的投資回報率,是國內廠商在國際市場上取得成功的“吸金”利器。 據伽馬數據發布的《2023全球移動游…

SpringCloud搭建微服務之Consul服務配置

1. 概述 前面有介紹過Consul既可以用于服務注冊和發現,也可以用于服務配置,本文主要介紹如何使用Consul實現微服務的配置中心,有需要了解如何安裝Consul的小伙伴,請查閱SpringCloud搭建微服務之Consul服務注冊與發現 &#xff0c…

steam怎么付款

信用卡支付 登錄Steam賬戶,選擇需要購買的游戲或其他物品,點擊“加入購物車”。在購物車頁面點擊“去結賬”按鈕,進入付款頁面。在付款頁面選擇信用卡付款方式,填寫信用卡信息,輸入驗證碼,點擊確認付款。 …

Servlet 新手村引入-編寫一個簡單的servlet項目

Servlet 新手村引入-編寫一個簡單的servlet項目 文章目錄 Servlet 新手村引入-編寫一個簡單的servlet項目一、編寫一個 Hello world 項目1.創建項目2.引入依賴3.手動創建一些必要的目錄/文件4.編寫代碼5.打包程序6.部署7.驗證程序 二、更方便的處理方案(插件引入&am…

autocrlf和safecrlf

git遠程拉取及提交代碼,windows和linux平臺換行符轉換問題,用以下兩行命令進行配置: git config --global core.autocrlf false git config --global core.safecrlf true CRLF是windows平臺下的換行符,LF是linux平臺下的換行符。…

98 greenplum 集群搭建過程中碰到的幾個問題

前言 最近有搭建 greenplum 集群的需求 然后 在搭建的過程中碰到了一些問題, 還是有一些時間開銷 并且問題也稍微有些復雜, 因此記錄一下 1. Do not have enough valid segments to start the array. 報錯日志信息如下 20220408:14:15:29:021638 gpstart:gp1:gpadmin-[I…

基于springboot+vue的公交線路查詢系統

博主主頁:貓頭鷹源碼 博主簡介:Java領域優質創作者、CSDN博客專家、阿里云專家博主、公司架構師、全網粉絲5萬、專注Java技術領域和畢業設計項目實戰,歡迎高校老師\講師\同行交流合作 ?主要內容:畢業設計(Javaweb項目|小程序|Pyt…

Find My運動相機|蘋果Find My技術與相機結合,智能防丟,全球定位

運動相機設計用于在各種運動和極限環境中使用,如徒步、登山、攀巖、騎行、滑翔、滑雪、游泳和潛水等,它們通常具有防抖防震、深度防水和高清畫質的特點,能夠適應顛簸劇烈的環境,甚至可以承受一定程度的摔落,一些運動相…

基于systick實現獲取系統運行時間

基于systick實現獲取系統運行時間 文章目錄 基于systick實現獲取系統運行時間systick.c代碼結構:代碼功能:總結 systick.c #include <stdint.h> #include "gd32f30x.h"static volatile uint64_t g_sysRunTime 0;/** ***************************************…

數學建模【聚類模型】

一、聚類模型簡介 “物以類聚&#xff0c; 人以群分”&#xff0c;所謂的聚類&#xff0c;就是將樣本劃分為由類似的對象組成的多個類的過程。聚類后&#xff0c;我們可以更加準確的在每個類中單獨使用統計模型進行估計、分析或預測&#xff0c;也可以探究不同類之間的相關性和…

springboot233大學生就業需求分析系統

大學生就業需求分析系統設計與實現 摘 要 信息數據從傳統到當代&#xff0c;是一直在變革當中&#xff0c;突如其來的互聯網讓傳統的信息管理看到了革命性的曙光&#xff0c;因為傳統信息管理從時效性&#xff0c;還是安全性&#xff0c;還是可操作性等各個方面來講&#xff…

C語言-簡單的環形隊列的源碼示例

概述 環形隊列&#xff08;Circular Queue&#xff09;是一種常見的數據結構&#xff0c;特別適用于在單片機等資源受限的環境下實現緩沖區或隊列功能。下面是一個簡單的環形隊列的源碼示例&#xff0c;用C語言實現&#xff1a; #include <stdio.h> #include <stdint…