验证码生成

本文涉及的产品
函数计算FC,每月15万CU 3个月
简介:

1、验证码引用与生成

 
  1. 验证码:<html:text property="checkcode"></html:text> 
  2.     <img src="image.jsp"><br> 

image.jsp:

 
  1. <%@ page contentType="image/jpeg" import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*" %> 
  2. <%! 
  3. Color getRandColor(int fc,int bc){//给定范围获得随机颜色 
  4.         Random random = new Random(); 
  5.         if(fc>255) fc=255
  6.         if(bc>255) bc=255
  7.         int r=fc+random.nextInt(bc-fc); 
  8.         int g=fc+random.nextInt(bc-fc); 
  9.         int b=fc+random.nextInt(bc-fc); 
  10.         return new Color(r,g,b); 
  11.         } 
  12. %> 
  13. <% 
  14. //设置页面不缓存 
  15. response.setHeader("Pragma","No-cache"); 
  16. response.setHeader("Cache-Control","no-cache"); 
  17. response.setDateHeader("Expires"0); 
  18.  
  19. // 在内存中创建图象 
  20. int width=60, height=20
  21. BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); 
  22.  
  23. // 获取图形上下文 
  24. Graphics g = image.getGraphics(); 
  25.  
  26. //生成随机类 
  27. Random random = new Random(); 
  28.  
  29. // 设定背景色 
  30. g.setColor(getRandColor(200,250)); 
  31. g.fillRect(00, width, height); 
  32.  
  33. //设定字体 
  34. g.setFont(new Font("Times New Roman",Font.PLAIN,18)); 
  35.  
  36. //画边框 
  37. //g.setColor(new Color()); 
  38. //g.drawRect(0,0,width-1,height-1); 
  39.  
  40.  
  41. // 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到 
  42. g.setColor(getRandColor(160,200)); 
  43. for (int i=0;i<155;i++) 
  44.     int x = random.nextInt(width); 
  45.     int y = random.nextInt(height); 
  46.         int xl = random.nextInt(12); 
  47.         int yl = random.nextInt(12); 
  48.     g.drawLine(x,y,x+xl,y+yl); 
  49.  
  50. // 取随机产生的认证码(4位数字) 
  51. //String rand = request.getParameter("rand"); 
  52. //rand = rand.substring(0,rand.indexOf(".")); 
  53. String sRand=""
  54. for (int i=0;i<4;i++){ 
  55.     String rand=String.valueOf(random.nextInt(10)); 
  56.     sRand+=rand; 
  57.     // 将认证码显示到图象中 
  58.     g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));//调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成 
  59.     g.drawString(rand,13*i+6,16); 
  60.  
  61. // 将认证码存入SESSION 
  62. session.setAttribute("ccode",sRand); 
  63.  
  64.  
  65. // 图象生效 
  66. g.dispose(); 
  67.  
  68. // 输出图象到页面 
  69. ImageIO.write(image, "JPEG", response.getOutputStream()); 
  70.  
  71.  
  72. %>  

2、判断验证码是否正确:从session中取出验证码

 
  1. // 先判断验证码是否正确 
  2.         String ccode = (String) request.getSession().getAttribute("ccode"); 
  3.         String checkcode = userForm.getCheckcode(); 
  4.         if (!(checkcode.equals(ccode))) { 
  5.             ActionMessages errors = new ActionMessages(); 
  6.             errors.add("checkcode"new ActionMessage("checkcode.error")); 
  7.             super.saveErrors(request, errors); 
  8.             return mapping.getInputForward(); 
  9.         } 

 


本文转自 tianya23 51CTO博客,原文链接:http://blog.51cto.com/tianya23/682287,如需转载请自行联系原作者

相关实践学习
【AI破次元壁合照】少年白马醉春风,函数计算一键部署AI绘画平台
本次实验基于阿里云函数计算产品能力开发AI绘画平台,可让您实现“破次元壁”与角色合照,为角色换背景效果,用AI绘图技术绘出属于自己的少年江湖。
从 0 入门函数计算
在函数计算的架构中,开发者只需要编写业务代码,并监控业务运行情况就可以了。这将开发者从繁重的运维工作中解放出来,将精力投入到更有意义的开发任务上。
相关文章
|
Web App开发 缓存 应用服务中间件
【CDN 最佳实践】获取历史脏数据的处理思路及规避方法
保证提供给客户端准确的数据是保障服务质量的最基本的要求。但是在实际使用过程中经常会发现客户端访问到的数据为历史脏数据影响客户体验。本文将在包括 CDN 的场景下分析常见出现该问题的原因以及规避方法,希望大家可以在遇到该问题时可依据该思路尽快恢复解决。
4743 0
|
11月前
|
存储 数据管理 API
零代码能力:轻松搞定表单和API接口,少写80%后端代码,内含资源
小白接口(果创云 YesApi.cn)是一个零代码和低代码开发平台,提供一站式后端云服务,帮助开发者、学生、业余爱好者、工作室、中小企业及无IT技术人员的传统企业快速搭建应用、接口、服务和网站。平台提供500+免费API接口,支持在线API开发、在线表单、数据库管理、图片文件存储、会员管理等功能,无需后端开发经验,轻松实现数据处理和应用开发。
|
NoSQL Java Redis
手机验证码登录
手机验证登录分为三个API接口,分别为:获取图片验证码、获取手机短信验证码、登录。 1.获取图片验证码:通过工具类生成图片验证码,将随机验证码保存到session中,将图片验证码转为base64码放到对应的entity字段里。
9800 0
函数指针数组
函数指针数组
66 0
|
消息中间件 Docker 容器
springcloud:安装rabbitmq并配置延迟队列插件
本期主要讲解如何利用docker快速安装rabbitmq并且配置延迟队列插件
555 0
springcloud:安装rabbitmq并配置延迟队列插件
【LeetCode】-- 144. 二叉树的前序遍历
【LeetCode】-- 144. 二叉树的前序遍历
205 0
【LeetCode】-- 144. 二叉树的前序遍历
|
SQL 数据库 索引
数据库优化四个方面
数据库优化四个方面
232 0
|
网络协议 Windows
路由交换基础——DHCP工作原理及DHCP Relay
路由交换基础——DHCP工作原理及DHCP Relay
651 0
路由交换基础——DHCP工作原理及DHCP Relay
|
存储 缓存 安全
【高并发】导致并发编程频繁出问题的“幕后黑手”
工作了3年的小菜同学,平时在公司只是做些CRUD的常规工作,这次,出去面试被面试官一顿虐啊!尤其是并发编程的知识简直就是被吊打啊。小菜心有不甘,回来找自己工作经验非常丰富的朋友大冰来帮助自己提升并发编程的知识,于是便有了接下来的一系列小菜学并发的文章。
365 0
【高并发】导致并发编程频繁出问题的“幕后黑手”