第一篇是純利用現有JDK提供的繪圖類(ImageIO)類製作,這個過程比較複雜且需要了解
ImageIO
類。
這一篇文章是利用Hutool工具類來實現的,該工具類已經封裝驗證碼所需的相關類等,使用起來較為簡單和方便。
Hutool工具類介紹
Hutool是一個小而全的Java工具類庫,透過靜態方法封裝,降低相關API的學習成本,提高工作效率,使Java擁有函式式語言般的優雅,讓Java語言也可以“甜甜的”。
Hutool中的工具方法來自每個使用者的精雕細琢,它涵蓋了Java開發底層程式碼中的方方面面,它既是大型專案開發中解決小問題的利器,也是小型專案中的效率擔當;
Web開發
與其它框架無耦合
高度可替換
Hutool官方網站:https://hutool。cn/
Hutool實現驗證碼生成
利用Hutool實現驗證碼校驗,校驗的Servlet與今天的第一篇是一樣的,唯一就是驗證碼的生成是不一樣的。利用Hutool生成驗證碼更快捷。
獲取Hutool:
jar包下載:https://repo1。maven。org/maven2/cn/hutool/hutool-all/5。8。8/
Maven:在專案的pom。xml的dependencies中加入以下內容:
cn。hutool
hutool-all
5。8。8
Maven相關可參閱:https://mp。weixin。qq。com/s/kOxaX6sDF6jyZRaK4KecKw
生成驗證碼:
設定驗證碼長、寬、驗證碼字元數、干擾元素個數:
LineCaptcha lineCaptcha = CaptchaUtil。createLineCaptcha(100,30,4,25);
在頁面顯示驗證碼及儲存驗證碼內容到Session:
try{ lineCaptcha。write(response。getOutputStream()); String code = lineCaptcha。getCode();//獲取驗證碼內容 request。getSession()。setAttribute(“piccode”,code); response。getOutputStream()。close(); }catch (IOException e){ e。printStackTrace(); }
這個就實現了驗證碼的生成,相比於第一篇自己製作簡潔了許多。
完整程式碼:
ImageGenerate。java
public class ImageGenerate extends HttpServlet { public void doGet (HttpServletRequest request,HttpServletResponse response) { LineCaptcha lineCaptcha = CaptchaUtil。createLineCaptcha(100,30,4,25); response。setContentType(“image/jpeg”); response。setHeader(“Pragma”, “No-cache”); try{ lineCaptcha。write(response。getOutputStream()); String code = lineCaptcha。getCode(); request。getSession()。setAttribute(“piccode”,code); response。getOutputStream()。close(); }catch (IOException e){ e。printStackTrace(); } }}
測試驗證碼生成
還是需要先配置web。xml檔案:
其他樣式的驗證碼
上面展示的驗證碼是線段干擾樣式的驗證碼,Hutool工具類還提供了其他樣式的驗證碼:
CircleCaptcha -圓圈干擾驗證碼
例:
//定義圖形驗證碼的長、寬、驗證碼字元數、干擾元素個數CircleCaptcha captcha = CaptchaUtil。createCircleCaptcha(200, 100, 4, 20);try{ lineCaptcha。write(response。getOutputStream()); String code = lineCaptcha。getCode();//獲取驗證碼內容 request。getSession()。setAttribute(“piccode”,code); response。getOutputStream()。close();}catch (IOException e){ e。printStackTrace();}
2。ShearCaptcha 扭曲干擾驗證碼
例:
//定義圖形驗證碼的長、寬、驗證碼字元數、干擾線寬度ShearCaptcha captcha = CaptchaUtil。createShearCaptcha(200, 100, 4, 4);try{ lineCaptcha。write(response。getOutputStream()); String code = lineCaptcha。getCode();//獲取驗證碼內容 request。getSession()。setAttribute(“piccode”,code); response。getOutputStream()。close();}catch (IOException e){ e。printStackTrace();}
3。Hutool還提供了自定義驗證碼
有時候標準的驗證碼不滿足要求,比如我們希望使用純字母的驗證碼、純數字的驗證碼、加減乘除的驗證碼,此時我們就要自定義
CodeGenerator
例:
// 自定義純數字的驗證碼(隨機4位數字,可重複)RandomGenerator randomGenerator = new RandomGenerator(“0123456789”, 4);LineCaptcha lineCaptcha = CaptchaUtil。createLineCaptcha(200, 100);lineCaptcha。setGenerator(randomGenerator);// 重新生成codelineCaptcha。createCode();
ShearCaptcha captcha = CaptchaUtil。createShearCaptcha(200, 45, 4, 4);// 自定義驗證碼內容為四則運算方式captcha。setGenerator(new MathGenerator());// 重新生成codecaptcha。createCode();
公眾號本文地址:https://mp。weixin。qq。com/s/aeLqqgsqGBj3eqLilRtS-w
歡迎關注公眾號:愚生淺末。