由來
隨着攻擊防護做的越來越全面,而圖形驗證碼又是一種簡單有效的防攻擊和防抓取手段,因此應用越來越廣。而Hutool中抽象了驗證碼的實現,也提供了幾個簡單的驗證碼實現,從而大大減少服務端開發成本。
由於對驗證碼需求量巨大,且我之前項目中有所積累,因此在Hutool中加入驗證碼生成和校驗功能。
引入Hutool
瞭解Hutool的更多信息請訪問:http://hutool.cn/
<dependency>
<groupId>com.xiaoleilu</groupId>
<artifactId>hutool-all</artifactId>
<version>3.2.3</version>
</dependency>
介紹
驗證碼功能位於com.xiaoleilu.hutool.captcha
包中,核心接口爲ICaptcha
,此接口定義了以下方法:
createCode
創建驗證碼,實現類需同時生成隨機驗證碼字符串和驗證碼圖片getCode
獲取驗證碼的文字內容verify
驗證驗證碼是否正確,建議忽略大小寫write
將驗證碼寫出到目標流中
其中write方法只有一個OutputStream
,ICaptcha
實現類可以根據這個方法封裝寫出到文件等方法。
AbstractCaptcha
爲一個ICaptcha
抽象實現類,此類實現了驗證碼文本生成、非大小寫敏感的驗證、寫出到流和文件等方法,通過繼承此抽象類只需實現createImage
方法定義圖形生成規則即可。
實現類
LineCaptcha
線段干擾的驗證碼
生成效果大致如下:
貼栗子:
//定義圖形驗證碼的長和寬
LineCaptcha lineCaptcha = CaptchaUtil.createLineCaptcha(200, 100);
//LineCaptcha lineCaptcha = new LineCaptcha(200, 100, 4, 150);
//圖形驗證碼寫出,可以寫出到文件,也可以寫出到流
lineCaptcha.write("d:/line.png");
//驗證圖形驗證碼的有效性,返回boolean值
lineCaptcha.verify("1234");
CircleCaptcha
圓圈干擾驗證碼
貼栗子:
//定義圖形驗證碼的長、寬、驗證碼字符數、干擾元素個數
CircleCaptcha captcha = CaptchaUtil.createCircleCaptcha(200, 100, 4, 20);
//CircleCaptcha captcha = new CircleCaptcha(200, 100, 4, 20);
//圖形驗證碼寫出,可以寫出到文件,也可以寫出到流
captcha.write("d:/circle.png");
//驗證圖形驗證碼的有效性,返回boolean值
captcha.verify("1234");
ShearCaptcha
扭曲干擾驗證碼
貼栗子:
//定義圖形驗證碼的長、寬、驗證碼字符數、干擾線寬度
ShearCaptcha captcha = CaptchaUtil.createShearCaptcha(200, 100, 4, 4);
//ShearCaptcha captcha = new ShearCaptcha(200, 100, 4, 4);
//圖形驗證碼寫出,可以寫出到文件,也可以寫出到流
captcha.write("d:/shear.png");
//驗證圖形驗證碼的有效性,返回boolean值
captcha.verify("1234");
寫出到瀏覽器(Servlet輸出)
ICaptcha captcha = ...;
captcha.write(response.getOutputStream());
//Servlet的OutputStream記得自行關閉哦!