SpringBoot+hutool實(shí)現(xiàn)圖片驗(yàn)證碼
一、理解 “ 服務(wù)器 / 瀏覽器 ”溝通流程(3步)
第1步:瀏覽器使用<img src="/test/controller”>
標(biāo)簽請求特定 Controller 路徑。
第2步:服務(wù)器 Controller 返回圖片的二進(jìn)制數(shù)據(jù)。
第3步:瀏覽器接收到數(shù)據(jù),顯示圖片。
二、開發(fā)前準(zhǔn)備:
Spring Boot開發(fā)常識
hutool工具(hutool是一款Java輔助開發(fā)工具,利用它可以快速生成驗(yàn)證碼圖片,從而避免讓我們編寫大量重復(fù)代碼,具體使用請移至官網(wǎng))
<!-- pom 導(dǎo)包:hutool 工具 --> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-captcha</artifactId> <version>5.8.5</version> </dependency>
三、 代碼實(shí)現(xiàn)
【 index.html 】頁面
<!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="UTF-8"> <title>驗(yàn)證碼頁面</title> </head> <body> <form action="#" method="post"> <!-- img標(biāo)簽負(fù)責(zé)向服務(wù)器 Controller 請求圖片資源 --> <img src="/test/code" id="code" onclick="refresh();"> </form> </body> <!-- “點(diǎn)擊驗(yàn)證碼圖片,自動(dòng)刷新” 腳本 --> <script> function refresh() { document.getElementById("code").src = "/test/code?time" + new Date().getTime(); } </script> </html>
【SpringBoot后端】
@RestController @RequestMapping("test") public class TestController { @Autowired HttpServletResponse response; @Autowired HttpSession session; @GetMapping("code") void getCode() throws IOException { // 利用 hutool 工具,生成驗(yàn)證碼圖片資源 CircleCaptcha captcha = CaptchaUtil.createCircleCaptcha(200, 100, 4, 5); // 獲得生成的驗(yàn)證碼字符 String code = captcha.getCode(); // 利用 session 來存儲驗(yàn)證碼 session.setAttribute("code",code); // 將驗(yàn)證碼圖片的二進(jìn)制數(shù)據(jù)寫入【響應(yīng)體 response 】 captcha.write(response.getOutputStream()); } }
四、“點(diǎn)擊驗(yàn)證碼圖片自動(dòng)刷新” 是如何實(shí)現(xiàn)的 ?
HTML 規(guī)范規(guī)定,在 <img src=“xxx”>
標(biāo)簽中,每當(dāng) src 路徑發(fā)生變化時(shí),瀏覽器就會(huì)自動(dòng)重新請求資源。所以我們可以編寫一個(gè)簡單的 js 腳本,只要驗(yàn)證碼圖片被點(diǎn)擊,src 路徑就會(huì)被加上當(dāng)前【時(shí)間戳】,從而達(dá)到改變 src 路徑的目的。
<img src="/test/code" id="code" onclick="refresh();"> ...... <!-- “點(diǎn)擊驗(yàn)證碼圖片,自動(dòng)刷新” 腳本 --> <script> function refresh() { document.getElementById("code").src = "/test/code?time" + new Date().getTime(); } </script>
五、最終效果
到此這篇關(guān)于SpringBoot+hutool實(shí)現(xiàn)圖片驗(yàn)證碼的文章就介紹到這了,更多相關(guān)SpringBoot 圖片驗(yàn)證碼內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MyBatis存儲過程、MyBatis分頁、MyBatis一對多增刪改查操作
本文通過一段代碼給大家介紹了MyBatis存儲過程、MyBatis分頁、MyBatis一對多增刪改查操作,非常不錯(cuò),具有參考借鑒價(jià)值,感興趣的朋友一起看看吧2016-11-11Java實(shí)現(xiàn)帶有權(quán)重隨機(jī)算法的示例詳解
這篇文章主要為大家詳細(xì)介紹了Java如何實(shí)現(xiàn)帶有權(quán)重隨機(jī)算法,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-10-10Java中的Valid和Validated的比較內(nèi)容
在本篇文章里小編給大家整理的是關(guān)于Java中的Valid和Validated的比較內(nèi)容,對此有興趣的朋友們可以學(xué)習(xí)參考下。2021-02-02SpringBoot使用spring.config.import多種方式導(dǎo)入配置文件
本文主要介紹了SpringBoot使用spring.config.import多種方式導(dǎo)入配置文件,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05