圖形驗證碼是最經典,也是最常用的驗證方式。今天介紹一個非常不錯的類庫:Java圖形驗證碼,支持gif、中文、算術等類型,可用於Java Web、JavaSE等項目。
官網:
<code>https
: /<code>
效果圖:
0x01:項目引入easy-captcha
<code><
dependencies
><
dependency
><
groupId
>com.github.whvcsegroupId
><
artifactId
>easy-captchaartifactId
><
version
>1.6.2version
>dependency
>dependencies
> /<code>
0x02:SpringBoot項目創建圖形驗證碼
前後端分離項目中建議不要存儲在session中;而使用分佈式session,存儲在redis中,redis存儲需要一個key,key一同返回給前端用於驗證輸入。
<code>public
class
CaptchaController {private
RedisUtil redisUtil; ("/vcode/captcha"
)public
JsonResult captcha(HttpServletRequest request, HttpServletResponse response) throws Exception { SpecCaptcha specCaptcha =new
SpecCaptcha(130
,48
,5
);String
verCode = specCaptcha.text().toLowerCase();String
key = UUID.randomUUID().toString(); redisUtil.setEx(key, verCode,30
, TimeUnit.MINUTES);return
JsonResult.ok().put("key"
, key).put("image"
, specCaptcha.toBase64()); } ("/vcode/vaild"
)public
JsonResult login(String
username,String
password,String
verCode,String
verKey){String
redisCode = redisUtil.get(verKey);if
(verCode==null
|| !redisCode.equals(verCode.trim().toLowerCase())) {return
JsonResult.error("驗證碼不正確"
); } } } /<code>
0x03:前端使用ajax獲取驗證碼並驗證
<code><
img
id
="verImg"
width
="130px"
height
="48px"
/><
script
>
var
verKey; $.get
('/vcode/captcha', function(res) { verKey = res.key; $('#verImg'
).attr('src'
, res.image); },'json'
); $.post('/vcode/login'
, {verKey
: verKey,verCode
:'8u6h'
,username
:'admin'
,password
:'admin'
},function
(res
) {console
.log(res); },'json'
);script
>/<code>