图形验证码是最经典,也是最常用的验证方式 。今天介绍一个非常不错的类库:JAVA图形验证码,支持gif、中文、算术等类型,可用于Java Web、JavaSE等项目 。
官网:
https://gitee.com/whvse/EasyCaptcha
效果图:
文章插图
0x01:项目引入easy-captcha
<dependencies> <dependency> <groupId>com.github.whvcse</groupId> <artifactId>easy-captcha</artifactId> <version>1.6.2</version> </dependency></dependencies>
0x02:SpringBoot项目创建图形验证码
前后端分离项目中建议不要存储在session中;而使用分布式session,存储在redis中,redis存储需要一个key,key一同返回给前端用于验证输入 。
@Controllerpublic class CaptchaController { @Autowired private RedisUtil redisUtil; @ResponseBody @RequestMApping("/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(); // 存入redis并设置过期时间为30分钟 redisUtil.setEx(key, verCode, 30, TimeUnit.MINUTES); // 将key和base64返回给前端 return JsonResult.ok().put("key", key).put("image", specCaptcha.toBase64()); } @ResponseBody @PostMapping("/vcode/vaild") public JsonResult login(String username,String password,String verCode,String verKey){ // 获取redis中的验证码 String redisCode = redisUtil.get(verKey); // 判断验证码 if (verCode==null || !redisCode.equals(verCode.trim().toLowerCase())) { return JsonResult.error("验证码不正确"); } } }
0x03:前端使用ajax获取验证码并验证
<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>
【Java图形验证码支持gif、中文、算术等】
推荐阅读
- Java知识点梳理
- 如果C++最强大,为什么它不及Java、Python流行?
- Nginx和Tomcat配合实现Java Web服务热部署
- Google 官方Java 编码规范
- JavaScript 里的奇葩知识
- 8种交叉验证类型的深入解释和可视化介绍
- 对于 JavaScript 中循环之间的技术差异概述
- 推荐5个爆款Java开源博客,是我目前用过最好用的博客系统
- 为什么Java类不支持多继承而接口可以?
- 如何利用Java代码操作索引库?