Java生成图形验证码-Java实现图形验证码-支持gif、中文、算术-《Java笔记》

admin 2025-10-19 03:07:54 编程 来源:ZONE.CI 全球网 0 阅读模式

Java 图形验证码图形验证码是最经典,也是最常用的验证方式。介绍一个非常不错的类库:Java图形验证码,支持gif、中文、算术等类型,可用于Java Web、JavaSE等项目。官网:https://gitee.com/whvse/EasyCaptcha效果图:image.png

项目引入easy-captcha

  1. <dependencies>
  2. <dependency>
  3. <groupId>com.github.whvcse</groupId>
  4. <artifactId>easy-captcha</artifactId>
  5. <version>1.6.2</version>
  6. </dependency>
  7. </dependencies>

SpringBoot项目创建图形验证码

前后端分离项目中建议不要存储在session中;而使用分布式session,存储在redis中,redis存储需要一个key,key一同返回给前端用于验证输入。

  1. @Controller
  2. public class CaptchaController {
  3. @Autowired
  4. private RedisUtil redisUtil;
  5. @ResponseBody
  6. @RequestMapping("/vcode/captcha")
  7. public JsonResult captcha(HttpServletRequest request, HttpServletResponse response) throws Exception {
  8. SpecCaptcha specCaptcha = new SpecCaptcha(130, 48, 5);
  9. String verCode = specCaptcha.text().toLowerCase();
  10. String key = UUID.randomUUID().toString();
  11. // 存入redis并设置过期时间为30分钟
  12. redisUtil.setEx(key, verCode, 30, TimeUnit.MINUTES);
  13. // 将key和base64返回给前端
  14. return JsonResult.ok().put("key", key).put("image", specCaptcha.toBase64());
  15. }
  16. @ResponseBody
  17. @PostMapping("/vcode/vaild")
  18. public JsonResult login(String username,String password,String verCode,String verKey){
  19. // 获取redis中的验证码
  20. String redisCode = redisUtil.get(verKey);
  21. // 判断验证码
  22. if (verCode==null || !redisCode.equals(verCode.trim().toLowerCase())) {
  23. return JsonResult.error("验证码不正确");
  24. }
  25. }
  26. }

前端使用ajax获取验证码并验证

  1. <img id="verImg" width="130px" height="48px"/>
  2. <script>
  3. var verKey;
  4. // 获取验证码
  5. $.get('/vcode/captcha', function(res) {
  6. verKey = res.key;
  7. $('#verImg').attr('src', res.image);
  8. },'json');
  9. // 登录
  10. $.post('/vcode/login', {
  11. verKey: verKey,
  12. verCode: '8u6h',
  13. username: 'admin'
  14. password: 'admin'
  15. }, function(res) {
  16. console.log(res);
  17. }, 'json');
  18. </script>

Java实现图形验证码-支持gif、中文、算术 - 图2

以太坊cppgolang区别 编程

以太坊cppgolang区别

以太坊是一种去中心化的开源平台,它采用智能合约技术,旨在构建和运行不受干扰的分布式应用程序。作为目前最受欢迎的区块链平台之一,以太坊提供了多种编程语言的支持,其
progolang 编程

progolang

Go语言(Golang)是由Google开发的一门静态类型编程语言。作为一名专业的Golang开发者,我深知这门语言的优势和特点。在本文中,我将介绍Golang
golangn个发送者 编程

golangn个发送者

Golang是一种开源的编程语言,由Google团队开发,旨在提高程序的并发性和简化软件开发过程。在Go语言中,有时需要向多个接收者发送信息。本文将介绍如何在G
golang技能图谱 编程

golang技能图谱

从互联网行业的快速发展到人工智能技术的日益成熟,各种编程语言也应运而生。而在这众多的编程语言中,Golang(即Go)作为一门强大且高效的开发语言备受关注。Go
评论:0   参与:  9