后台实现验证码生成

效果图如下:

1.适用需求

后台生成验证码,用于登陆验证。

2. 功能实现所需控件/文件:

无(普通标签)

3.功能点实现思路

1)前台思路:

(1)前台一个<input>用于输入验证码;一个<img>用于展示验证码。

(2)验证码生成以及展示,点击刷新功能,可以为<img>绑定click事件。

(3)click事件里面写ajax请求,通过后台生成处理好的带噪点的验证码图片。

注意:后台直接返回图片,不是验证码的字符!若返回字符,则验证码就失去了意义(前台很容易就可以获取验证码字符,进行多次恶意访问了)(这点考虑了系统安全性)

(4)关于返回的图片如何在<img>标签内展示

直接利用img的src属性,属性值为后台生成验证码的方法请求路径即可。当点击验证码的时候,再动态设置src属性即可(原访问地址+随机时间戳,防止同一路径浏览器不另作访问的问题)

前台部分代码:


/*验证码输入框*/<input class="verifyInput"  name="verifyInput" placeholder="请输入验证码">   /*验证码图片*/<img class="verifyCode" onclick="changeCode()" src="getVerifyCode">//src的getVerifyCode是后台访问地址;项目为SSM框架。/*点击刷新验证码*/function changeCode(){var src = " getVerifyCode?"+new Date().getTime(); //加时间戳,防止浏览器利用缓存$('.verifyCode').attr("src",src);                  //jQuery写法}

2)后台思路:

后台思路很简单,利用BufferedImage类创建一张图片,再用Graphics2D对图片进行绘制(生成随机字符,添加噪点,干扰线)即可。注意生成的验证码字符串要放到session中,用于接下来登陆的验证码验证(当然也是后台)。

部分代码如下:

/* 获取验证码图片*/@RequestMapping("/getVerifyCode ")public void getVerificationCode(HttpServletResponse response,HttpServletRequest request) {try {int width=200;int height=69;BufferedImage verifyImg=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);//生成对应宽高的初始图片String randomText = VerifyCode.drawRandomText(width,height,verifyImg);//单独的一个类方法,出于代码复用考虑,进行了封装。//功能是生成验证码字符并加上噪点,干扰线,返回值为验证码字符                   request.getSession().setAttribute("verifyCode", randomText);response.setContentType("image/png");//必须设置响应内容类型为图片,否则前台不识别OutputStream os = response.getOutputStream(); //获取文件输出流    ImageIO.write(verifyImg,"png",os);//输出图片流os.flush();os.close();//关闭流} catch (IOException e) {this.logger.error(e.getMessage());e.printStackTrace();}}
/*对图片进行处理的类和方法*/public class VerifyCode {  public static  String drawRandomText(int width,int height,BufferedImage verifyImg) {Graphics2D graphics = (Graphics2D)verifyImg.getGraphics();graphics.setColor(Color.WHITE);//设置画笔颜色-验证码背景色graphics.fillRect(0, 0, width, height);//填充背景graphics.setFont(new Font("微软雅黑", Font.BOLD, 40));//数字和字母的组合String baseNumLetter= = "123456789abcdefghijklmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ";StringBuffer sBuffer = new StringBuffer();int x = 10;  //旋转原点的 x 坐标String ch = "";Random random = new Random();for(int i = 0;i < 4;i++){graphics.setColor(getRandomColor());//设置字体旋转角度int degree = random.nextInt() % 30;  //角度小于30度int dot = random.nextInt(baseNumLetter.length());ch = baseNumLetter.charAt(dot) + "";sBuffer.append(ch);//正向旋转graphics.rotate(degree * Math.PI / 180, x, 45);graphics.drawString(ch, x, 45);//反向旋转graphics.rotate(-degree * Math.PI / 180, x, 45);x += 48;}//画干扰线for (int i = 0; i <6; i++) {// 设置随机颜色graphics.setColor(getRandomColor());// 随机画线graphics.drawLine(random.nextInt(width), random.nextInt(height),random.nextInt(width), random.nextInt(height));}//添加噪点for(int i=0;i<30;i++){int x1 = random.nextInt(width);int y1 = random.nextInt(height);graphics.setColor(getRandomColor());graphics.fillRect(x1, y1, 2,2);}return sBuffer.toString();}/*** 随机取色*/private static Color getRandomColor() {Random ran = new Random();Color color = new Color(ran.nextInt(256),ran.nextInt(256), ran.nextInt(256));return color;}}

4.功能实现心得:

验证码的功能实现思路很简单,从系统安全性和代码复用性这两点考虑,验证码必须后台生成,生成验证码的方法可以封装到静态工具类里。此外,后台用到许多Java自带的图片处理类值得学习。

——————————————————————————————————————————————

ps:转载分享任意,注明作者和原文链接即可 (●'◡'●)

当然,笔者能力有限,代码能够保证实现功能,但不能保证一定是性能最优的,如果有什么错误,不足,欢迎指正,一同进步!

后台java 实现验证码生成相关推荐

  1. java图形验证码生成工具类

    转载自   java图形验证码生成工具类 生成验证码效果       ValidateCode.java 验证码生成类 package cn.dsna.util.images; import java ...

  2. java模拟验证码生成

    设计思想 第一步:随机生成字符串 第二步:用户输入字符串 第三步:将两个字符串转化为同一类型 第四步:比较是否相同 第五步:输出结果 程序流程图 程序源代码 /* 2017/10/7 王翌淞 验证码模 ...

  3. 菜鸟学Java——简单验证码生成(Java版)

    验证码大家都知道,它的作用也不用我多说了吧.如果不太清楚请参见百度百科中的解释,一般验证码的生成就是随机产生字符(数字.字母或者汉字等),然后将这些生成的字符绘制成一张图片,再在图片上加上一些干扰元素 ...

  4. Java实现验证码生成

    随机产生5位验证码 格式:前四位为大写字母或小写字母 最后一位位数字 代码实现: public static void main(String[] args) {//定义一个内容为空的字符串记录最后生 ...

  5. java 图形校验_java图形验证码生成工具类 web页面校验验证码

    java图形验证码生成工具类 web页面校验验证码 发布于 2020-7-14| 复制链接 摘记: 最近做验证码,参考网上案例,发现有不少问题,特意进行了修改和完善.验证码生成器: ```java i ...

  6. java 验证码生成和验证

    1.java 验证码生成与校验原理: 后台生辰验证码图片,将图片传到前台: 后台在session中保存验证码内容: 前台输入验证码后传到后台在后台取出session保存的验证码进行校验. 2.图片生成 ...

  7. 菜鸟学Java(六)——简单验证码生成(Java版)

    转载自  菜鸟学Java(六)--简单验证码生成(Java版) 验证码大家都知道,它的作用也不用我多说了吧.如果不太清楚请参见百度百科中的解释,一般验证码的生成就是随机产生字符(数字.字母或者汉字等) ...

  8. java后台处理excel_java后台利用Apache poi 生成excel文档提供前台下载示例

    之前在项目中会用到在java在后台把数据填入Word文档的模板来提供前台下载,为了自己能随时查看当时的实现方案及方便他人学习我写了这篇博客,访问量已经是我写的博客里第一了.于是乎我在学会用Java在后 ...

  9. java ean13 计算_实训java第三课 for 逻辑运算符 条件判断 商品条形码Ean-13验证码生成...

    package com.tarena.day03; public class SwitchDemo { /** * Switch */ public static void main(String[] ...

最新文章

  1. JQuery 名称冲突
  2. (转)Mat, vectorpoint2f,Iplimage等等常见类型转换
  3. neutron plugin 与 extension 编写流程
  4. iptables的配置实例
  5. Linux备份全攻略
  6. 为什么有的工人喜欢午餐和晚餐配着一瓶啤酒?
  7. 取得数组最大值与最小值
  8. python 怎么算l2范数_“火车过桥”“火车会车”和“火车超车”问题怎么解?图形很直观...
  9. java double 移位_【原创】Java移位运算
  10. JAVA正则表达式语法大全
  11. 通达OA11.2漏洞复现
  12. as常用固定搭配_as...as的结构和固定搭配都有什么
  13. Excel-VBA 快速上手(四、Excel 程序事件、工作簿事件、工作表事件)
  14. 数学建模常用算法案例k—means聚类分析
  15. 前端实现内网在线excel编辑和word在线编辑相关建议
  16. 李飞飞计算机视觉课程CS231n总结
  17. 微信开发JS接口安全域名 网页授权域名 业务域名
  18. cebemax hal库 stm32 OLED移植 解析
  19. android的vmos虚拟机,vmospro虚拟机
  20. 支付宝摇一摇红包脚本【Auto.js】

热门文章

  1. 实验2-4-5 简单实现x的n次方(10分)
  2. primitive原始数据类型
  3. React Native 入门实战视频教程(37 个视频)
  4. 北大青鸟消防设备说明书_北大青鸟火灾报警控制器JB-TG/T-JBF-11S厂家使用说明书...
  5. 云南民族文化旅游网页设计制作 简单静态HTML网页作品 我的家乡网页作业成品 学生旅游网站模板
  6. 官方bing壁纸软件-bing wallpaper
  7. 事件学习——1. 事件的认识
  8. AutoIt自动化实例
  9. Matlab断供哈工大,国产替代软件挺身而出,霸气
  10. C++音视频开发核心知识,小白入门必看基础知识