生成图片验证码的两种实现方式
来源:互联网 发布:数据库判断范式的例题 编辑:程序博客网 时间:2024/06/05 20:05
最近工作中,需求让新加一个图片验证码功能,其实这个功能之前自己写过,想必跟大家现在心里想到的实现方式一样,要么是通过servlet实现请求操作,要么是通过get请求实现操作。然后在后台通过session存储图片上的字符串,和之后前台请求过来的带的输入的字符串参数,做比较,判断是否一样。这种方式在这就不仔细说了,方法代码网上都有参考,下边会附上相关文献。
在这里主要说一下另外一种的实现方式,是在一篇博客里边看到的,写的挺好的,下边也有来源地址:
由于考虑到在多台机器上跑,不能用session, 于是决定 按照以下方案解决:
1,页面加载时,ajax异步调用后台;
2,后台生成验证码,生成的验证码图片用base64编码转变成字符串,与此同时将验证码加密存放在json返回值中(验证码的加密可以自己选用加密方式,只要加密解密能对应上就行);
3,页面接受验证码(加密)存放在隐藏域中,页面用img标签接受base64编码的图片,同时给 img标签绑定点击事件,调用2生成验证码。
4,当页面提交时,验证加密验证码和用户输入验证码加密的字符串即可。
相同点:
都是要想生成BufferedImage;
不同点:
传统的用session的手法是最后将image输出到输入流里边,返回到客户端,直接src里边get方法去接收
- BufferedImage image = (BufferedImage) objs[1]; //image生成方式就不细说了,可以网上查看
- response.setContentType("image/png");
- OutputStream os = response.getOutputStream();
- ImageIO.write(image, "png", os);
现在的是用base64对image进行编码,返回字符串,然后页面<image>标签中src对应的格式,如下:
BufferedImagebi= robot.createScreenCapture(r);//image生成方式就不细说了,可以网上查看 ByteArrayOutputStream os = new ByteArrayOutputStream(); OutputStream b64 = new Base64.OutputStream(os);
ImageIO.write(bi, "png", b64);//写入的是base64编码后的字符串 String result = os.toString("UTF-8");
String param = "data:image/png;base64,"+result;//拼接固定的接收格式
resultMap.put("image",param);//返回前台
js接收后, $("#imgObj").attr("src",param); <img id="imgObj" src="" />
参考文献:
http://blog.csdn.net/u011637069/article/details/51112187
http://codego.net/346203/
阅读全文
0 0
- 生成图片验证码的两种实现方式
- 验证码的两种生成方式
- 验证码功能的两种实现方式
- 图片验证码的Java实现方式
- 超简单的 Java+JS 图片验证码生成方式
- 生成检验码的两种方式
- 生成验证码的几种方式
- 图片轮播器的两种实现方式(ScrollView与collectionView)
- 实现图片加文字简介的两种方式
- 利用Selenium实现图片文件上传的两种方式
- 前端实现图片上传实时预览的两种方式
- 图片轮播的两种实现方式(一)
- jQuery图片无缝滑动效果的两种实现方式
- Android实现图片的高斯模糊(两种方式)
- 前端实现图片懒加载(lazyload)的两种方式
- java awt 实现简单的验证码图片的生成
- 两种验证码的实现代码
- 图片验证码的生成
- Centos中查询目录中内容命名ls
- 【最新】macOS Sierra 环境下 安装CocoaPods
- caffe+Windows10+Anconda3+matcaffe+pycaffe
- jdk-7u80-linux-i586.tar.gz
- autoware-ssd:caffe 编译报错 libhdf5_hl.so.10: cannot open shared object file: No such file or directory
- 生成图片验证码的两种实现方式
- centos7 mysql数据库安装和配置
- 为 Intent extra 定义键时最好使用应用的软件包名称作为前缀。这可以确保在您的应用与其他应用交互过程中这些键始终保持唯一。
- 10g,11gRAC CRS集群
- Git 从入门到精通(从远程分支获取最新版本git fetch与git pull)(二)
- mfc 控件 非空间变量 并设置其大小范围
- javaScript的组成部分
- JSP与Servlet之间传值
- 计算 h-index