Java 生成隨機(jī)驗(yàn)證碼圖片的示例
1.情景展示
登錄時(shí),生成隨機(jī)驗(yàn)證碼圖片,如何實(shí)現(xiàn)?
2.原因分析
后臺(tái)生成驗(yàn)證碼并生成圖片返回至前臺(tái)
3.解決方案
導(dǎo)包
import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.util.Random; import javax.imageio.ImageIO; import javax.servlet.ServletOutputStream; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletResponse; import org.apache.commons.lang.RandomStringUtils; import base.web.tools.WebUtils;
獲取驗(yàn)證碼請(qǐng)求處理
/** * 獲取驗(yàn)證碼 * @explain * @return 隨機(jī)數(shù)圖片 */ public String getImage() { try { int width = 55; int height = 25; // 取得一個(gè)4位隨機(jī)數(shù)字字符串 String s = RandomStringUtils.randomNumeric(4); HttpServletResponse response = WebUtils.getResponse(); // 存入cookie,用于與用戶的輸入進(jìn)行比較 Cookie cookie = new Cookie("validateCode", s); response.addCookie(cookie); response.setContentType("images/jpeg"); response.setHeader("Cache-Control", "no-cache"); ServletOutputStream out = response.getOutputStream(); BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics g = image.getGraphics(); // 設(shè)定背景色 g.setColor(getRandColor(200, 250)); g.fillRect(0, 0, width, height); // 設(shè)置字體 Font mFont = new Font("宋體", Font.BOLD, 18); g.setFont(mFont); // 畫(huà)邊框 // g.setColor(Color.BLACK); // g.drawRect(0, 0, width - 1, height - 1); // 生成隨機(jī)類 Random random = new Random(); // 將認(rèn)證碼顯示到圖象中 g.setColor(new Color(20 + random.nextInt(110), 20 + random.nextInt(110), 20 + random.nextInt(110))); // 將驗(yàn)證碼畫(huà)進(jìn)圖片 g.drawString(s, 5, 20); // 圖象生效 g.dispose(); // 輸出圖象到頁(yè)面 ImageIO.write((BufferedImage) image, "JPEG", out); out.flush(); out.close(); } catch (Exception e) { e.printStackTrace(); } return null; } /** * 給定范圍獲得隨機(jī)顏色 * @explain * @param fc * @param bc * @return */ private Color getRandColor(int fc, int bc) { Random random = new Random(); fc = (fc > 255) ? 255 : fc; bc = (bc > 255) ? 255 : bc; // 獲取3次 int r = fc + random.nextInt(bc - fc); int g = fc + random.nextInt(bc - fc); int b = fc + random.nextInt(bc - fc); return new Color(r, g, b); }
html片段
<img src="<c:url value="/getImage.do"/>" id="randomImage" style="cursor: pointer;vertical-align: bottom" height="35px" width="100px" onclick='sjs()' />
js片段
function sjs () { // 獲取圖片請(qǐng)求后面加一個(gè)隨機(jī)參數(shù),是為了避免同一個(gè)請(qǐng)求瀏覽器拒絕向服務(wù)器發(fā)送請(qǐng)求的問(wèn)題(緩存) $("#randomImage")[0].src = baseUrl + "/getImage.do?s=" + Math.random(); };
寫(xiě)在最后
哪位大佬如若發(fā)現(xiàn)文章存在紕漏之處或需要補(bǔ)充更多內(nèi)容,歡迎留言!??!
本文作者:Marydon
原文鏈接:https://www.cnblogs.com/Marydon20170307/p/12807842.html
以上就是Java 生成隨機(jī)驗(yàn)證碼圖片的示例的詳細(xì)內(nèi)容,更多關(guān)于Java 生成驗(yàn)證碼的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- Java生成條形碼code128(親測(cè)有效)
- Java 在PDF中添加條形碼的兩種方法
- Java zxing生成條形碼和二維嗎代碼實(shí)例
- Java創(chuàng)建、識(shí)別條形碼和二維碼方法示例
- javaWeb如何實(shí)現(xiàn)隨機(jī)圖片驗(yàn)證碼詳解
- java實(shí)現(xiàn)動(dòng)態(tài)驗(yàn)證碼
- 使用java + OpenCV破解頂象面積驗(yàn)證碼的示例
- 使用java + selenium + OpenCV破解騰訊防水墻滑動(dòng)驗(yàn)證碼功能
- java原生動(dòng)態(tài)生成驗(yàn)證碼
- java生成圖片驗(yàn)證碼的示例代碼
- java數(shù)字和中文算數(shù)驗(yàn)證碼的實(shí)現(xiàn)
- 詳細(xì)介紹Java阿里云的短信驗(yàn)證碼實(shí)現(xiàn)
- 如何使用Java redis實(shí)現(xiàn)發(fā)送手機(jī)驗(yàn)證碼功能
- Java實(shí)戰(zhàn)之用Spring開(kāi)發(fā)條形碼和驗(yàn)證碼
相關(guān)文章
利用Java實(shí)現(xiàn)mTLS調(diào)用
這篇文章主要介紹使用 Java作為客戶端 與受 mTLS 保護(hù)的服務(wù)交互。為了對(duì)我們的 Java 客戶端進(jìn)行 ssl 配置,我們需要先設(shè)置一個(gè) SSLContext。這簡(jiǎn)化了事情,因?yàn)?SSLContext 可用于各種 http 客戶端,接下來(lái)我們一起進(jìn)入下面文章了解具體內(nèi)容,需要的朋友可以參考一下2021-11-11基于Calendar獲取當(dāng)前時(shí)間的性能比較
這篇文章主要介紹了Calendar獲取當(dāng)前時(shí)間的性能比較,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06從0到1構(gòu)建springboot web應(yīng)用鏡像并使用容器部署的過(guò)程
這篇文章主要介紹了從0到1構(gòu)建springboot web應(yīng)用鏡像并使用容器部署,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-03-03Mapper類中存在名稱相同的方法重載報(bào)錯(cuò)問(wèn)題
這篇文章主要介紹了Mapper類中存在名稱相同的方法重載報(bào)錯(cuò)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03springboot+Quartz實(shí)現(xiàn)任務(wù)調(diào)度的示例代碼
本篇文章主要介紹了springboot + Quartz 實(shí)現(xiàn)任務(wù)調(diào)度的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-02-02