- 浏览: 2828735 次
- 性别:
- 来自: 武汉
文章分类
- 全部博客 (1173)
- 名言警句 (5)
- 心情随笔 (50)
- 数据库 (57)
- Java基础 (241)
- J2EE框架 (91)
- 数据结构 (12)
- 程序设计 (21)
- WEB技术 (128)
- 网络日志 (12)
- IT资讯 (247)
- linux (64)
- solaris (2)
- 其它 (143)
- WebService (4)
- 日语学习 (2)
- 机器人 (5)
- Android (5)
- cgywin (3)
- Game (1)
- DWR (1)
- spring (8)
- canvas (1)
- Guava (3)
- Modbus (5)
- 测试 (6)
- mongodb (9)
- Quartz (2)
- Cron (1)
- windows (2)
- 持续集成 (1)
- bootstrap (3)
- 结对编程 (1)
- nodejs (1)
- Netty (1)
- 安全 (3)
- webstorm (2)
- sparkline (1)
- Job (1)
- git (3)
- Maven (3)
- knockout (5)
- jquery (1)
- bower (1)
- docker (1)
- confluence (4)
- wiki (1)
- GoogleMap (1)
- jekyll (10)
- ruby (2)
- npm (3)
- browserify (1)
- gulp (3)
- openwrt (1)
- discuz (3)
- 输入法 (1)
- JPA (1)
- eclipse (2)
- IntelliJ (1)
- css (1)
- 虚拟机 (1)
- 操作系统 (1)
- azkaban (2)
- scrum (1)
最新评论
-
pangxiea_:
你好, 想请问一下 Linux下 这么使用rxtxcomm 在 ...
使用Java进行串口通信 -
abababudei:
请教一下,这个您是怎么解决的:/dev/ttyS2enteri ...
Java应用程序的MODBUS通讯 -
xuniverse:
hannibal005 写道楼主,我问下 request.se ...
用javascript与java进行RSA加密与解密 -
atxkm:
找了一下午,终于找到了
gulp 拷贝文件时如何移除文件目录结构 -
kalogen:
gtczr 写道非常感谢,经过我自己的修改,已经完美实现。发出 ...
用javascript与java进行RSA加密与解密
现在许多系统的注册、登录或者发布信息模块都添加的随机码功能,就是为了避免自动注册程序或者自动发布程序的使用。
验证码实际上就 是随机选择一些字符以图片的形式展现在页面上,如果进行提交操作的同时需要将图片上的字符同时提交,如果提交的字符与服务器session保存的不同,则 认为提交信息无效。为了避免自动程序分析解析图片,通常会在图片上随机生成一些干扰线或者将字符进行扭曲,增加自动识别的难度。
在这里,我们使用servlet来实现随机验证码的实现。
需要在web.xml中声明servlet
用户提交后就可以将用户输入的验证码与session中保存的字符串进行比对,达到验证的效果。
验证码实际上就 是随机选择一些字符以图片的形式展现在页面上,如果进行提交操作的同时需要将图片上的字符同时提交,如果提交的字符与服务器session保存的不同,则 认为提交信息无效。为了避免自动程序分析解析图片,通常会在图片上随机生成一些干扰线或者将字符进行扭曲,增加自动识别的难度。
在这里,我们使用servlet来实现随机验证码的实现。
java 代码
- package com.servlet;
- import java.awt.Color;
- import java.awt.Font;
- import java.awt.Graphics2D;
- import java.awt.image.BufferedImage;
- import java.util.Random;
- import javax.imageio.ImageIO;
- import javax.servlet.ServletException;
- import javax.servlet.ServletOutputStream;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import javax.servlet.http.HttpSession;
- /**
- * 生成随机验证码
- * @author bitiliu
- *
- */
- public class ValidateCodeServlet extends HttpServlet
- {
- private static final long serialVersionUID = 1L;
- //验证码图片的宽度。
- private int width=60;
- //验证码图片的高度。
- private int height=20;
- //验证码字符个数
- private int codeCount=4;
- private int x=0;
- //字体高度
- private int fontHeight;
- private int codeY;
- char[] codeSequence = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
- 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
- 'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
- /**
- * 初始化验证图片属性
- */
- public void init() throws ServletException
- {
- //从web.xml中获取初始信息
- //宽度
- String strWidth=this.getInitParameter("width");
- //高度
- String strHeight=this.getInitParameter("height");
- //字符个数
- String strCodeCount=this.getInitParameter("codeCount");
- //将配置的信息转换成数值
- try
- {
- if(strWidth!=null && strWidth.length()!=0)
- {
- width=Integer.parseInt(strWidth);
- }
- if(strHeight!=null && strHeight.length()!=0)
- {
- height=Integer.parseInt(strHeight);
- }
- if(strCodeCount!=null && strCodeCount.length()!=0)
- {
- codeCount=Integer.parseInt(strCodeCount);
- }
- }
- catch(NumberFormatException e)
- {}
- x=width/(codeCount+1);
- fontHeight=height-2;
- codeY=height-4;
- }
- protected void service(HttpServletRequest req, HttpServletResponse resp)
- throws ServletException, java.io.IOException {
- //定义图像buffer
- BufferedImage buffImg = new BufferedImage(
- width, height,BufferedImage.TYPE_INT_RGB);
- Graphics2D g = buffImg.createGraphics();
- //创建一个随机数生成器类
- Random random = new Random();
- //将图像填充为白色
- g.setColor(Color.WHITE);
- g.fillRect(0, 0, width, height);
- //创建字体,字体的大小应该根据图片的高度来定。
- Font font = new Font("Fixedsys", Font.PLAIN, fontHeight);
- //设置字体。
- g.setFont(font);
- //画边框。
- g.setColor(Color.BLACK);
- g.drawRect(0, 0, width - 1, height - 1);
- //随机产生160条干扰线,使图象中的认证码不易被其它程序探测到。
- g.setColor(Color.BLACK);
- for(int i = 0; i < 160; i++)
- {
- int x = random.nextInt(width);
- int y = random.nextInt(height);
- int xl = random.nextInt(12);
- int yl = random.nextInt(12);
- g.drawLine(x, y, x + xl, y + yl);
- }
- //randomCode用于保存随机产生的验证码,以便用户登录后进行验证。
- StringBuffer randomCode = new StringBuffer();
- int red = 0, green = 0, blue = 0;
- //随机产生codeCount数字的验证码。
- for (int i = 0; i < codeCount; i++) {
- //得到随机产生的验证码数字。
- String strRand = String.valueOf(codeSequence[random.nextInt(36)]);
- //产生随机的颜色分量来构造颜色值,这样输出的每位数字的颜色值都将不同。
- red = random.nextInt(255);
- green = random.nextInt(255);
- blue = random.nextInt(255);
- //用随机产生的颜色将验证码绘制到图像中。
- g.setColor(new Color(red, green, blue));
- g.drawString(strRand, (i + 1) * x, codeY);
- //将产生的四个随机数组合在一起。
- randomCode.append(strRand);
- }
- // 将四位数字的验证码保存到Session中。
- HttpSession session = req.getSession();
- session.setAttribute("validateCode", randomCode.toString());
- // 禁止图像缓存。
- resp.setHeader("Pragma", "no-cache");
- resp.setHeader("Cache-Control", "no-cache");
- resp.setDateHeader("Expires", 0);
- resp.setContentType("image/jpeg");
- //将图像输出到Servlet输出流中。
- ServletOutputStream sos = resp.getOutputStream();
- ImageIO.write(buffImg, "jpeg", sos);
- sos.close();
- }
- }
需要在web.xml中声明servlet
xml 代码
- <servlet>
- <servlet-name>ValidateCodeServlet</servlet-name>
- <servlet-class>com.servlet.ValidateCodeServlet</servlet-class>
- <init-param>
- <param-name>width</param-name>
- <param-value>200</param-value>
- </init-param>
- <init-param>
- <param-name>height</param-name>
- <param-value>80</param-value>
- </init-param>
- <init-param>
- <param-name>codeCount</param-name>
- <param-value>5</param-value>
- </init-param>
- </servlet>
- <servlet-mapping>
- <servlet-name>ValidateCodeServlet</servlet-name>
- <url-pattern>/validateCodeServlet</url-pattern>
- </servlet-mapping>
用户提交后就可以将用户输入的验证码与session中保存的字符串进行比对,达到验证的效果。
发表评论
-
高级Java程序员值得拥有的10本书
2015-05-04 07:24 765Java是时下最流行的编程语言之一。市面上也出现了适合初学者 ... -
深入理解java异常处理机制
2015-01-30 09:30 12791. 引子 try…catch…fi ... -
java 运行时参数设置
2015-01-07 09:13 821JVM的运行时参数: -Xms为执行单元内存的1/4, ... -
每个Java开发者都应该知道的5个JDK工具
2014-12-29 12:37 1102JDK是Java语言的软件开 ... -
使用双重锁判定可以大幅降低锁的征用
2014-12-29 12:30 703class ObjInstance { //单例 pri ... -
MAVEN Scope使用说明
2014-11-24 09:40 713在Maven的依赖管理中,经常会用到依赖的scope设置。这 ... -
Spring4 quartz job xml configuration
2014-11-11 09:46 14051. 定义job details public ... -
Add items into list in one line using guava
2014-11-10 10:54 693//@formatter:off fina ... -
配置动态读取(变化)文件 in Spring
2014-11-10 08:51 12921. 从环境变量中读取路径: <bean id=&q ... -
JAVA实现AES加密与解密
2014-11-04 15:34 614package com.eifesun.monitor.up ... -
Netty4.x分析
2014-07-31 11:06 1421官网定义: netty是一个异步、事件驱动的网络应用框架,用 ... -
Ways to sort lists of objects in Java based on multiple fields
2014-07-21 17:19 7341. the first way: Sorting wit ... -
how to parse a String to BigDecimal
2014-07-21 10:08 886private BigDecimal parsePrice( ... -
order list using google guava
2014-07-21 09:08 853Predicate<String> filter ... -
Java 读文件操作
2014-07-08 14:09 8571. only use java core, no exte ... -
怎样使Java 中测试按一定顺序执行
2014-03-10 11:27 1266@FixMethodOrder(MethodSorters. ... -
如何实现在当类初始化时,自动调动某个方法
2014-02-14 14:44 923有两种思路, 1. 将这个类实现为thread类 (or ... -
持续集成JenkinsAPI常见用法
2014-02-10 13:54 43jenkins(持续集成开源工具)提供了丰富的api接口,基 ... -
Sonar 安装与使用
2014-01-13 10:49 1691Sonar 是一个用于代码质量管理的开放平台。通过插件机制, ... -
源代码管理分析工具 Source Navigator的安装与使用
2014-01-13 09:51 1840Source-Navigator是原来redhat开发的一个 ...
相关推荐
验证码实际上就是随机选择一些字符以图片的形式展现在页面上,如果进行提交操作的同时需要将图片上的字符同时提交,如果提交的字符与服务器session保存的不同,则认为提交...本文介绍了使用servlet来实现随机验证码。
在这里,我们使用servlet来实现随机验证码的实现,有需要的朋友可以参考一下
主要介绍了Java 实现随机验证码功能简单实例的相关资料,需要的朋友可以参考下
本篇文章主要介绍了Java案例之随机验证码功能实现实例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
主要介绍了java随机验证码生成实现实例代码的相关资料,需要的朋友可以参考下
java随机动态生成汉字验证码图片的实例代码分享,只能用炫酷来形容,感兴趣就下载看看吧
主要介绍了java 随机生成6位短信验证码的实例代码,文中给大家扩展介绍了java随机生成四位数字验证码的方法,需要的朋友可以参考下
主要介绍了Java随机生成手机短信验证码的实例代码,代码分为哦简单版和复杂版,需要的朋友可以参考下
java随机动态生成汉字验证码图片的实例代码
util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码...
java随机产生验证码,可以随机生成数字、大写字母、小写字母。还可以随机生成文字字体、及大小。在图片上面可能字体都不不同、大小不等
验证码功能在各大网站都能用到,下面小编通过实例代码给大家分享Android 获取随机验证码功能,具体代码如下所示: package cn.hk.image; import java.awt.BasicStroke; import java.awt.Color; import java.awt....
util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码...
实例38 Java字符串与文件的互转 88 实例39 截取带汉字的字符串 91 实例40 替换字符串中的部分字符 92 实例41 Java字符串之密码加密 93 实例42 正则表达式验证字符串 95 第7章 Java常用类 98 实例43 数字的舍入...
实例147 随机读写Java类文件 221 第3篇 Java面向对象编程 第8章 面向对象(教学视频:72分钟) 226 8.1 类 226 实例148 简单的通讯录类 226 实例149 简单的长度单位转换类 227 实例150 卡车和卡车司机之间的关系 229...
这里主要实现了基本随机验证码BaseVerify和带有逻辑运算的简单验证码LogicVerify ##Usage ###setp1 在你的布局文件中对应的地方定义一个空的ImageView ###setp2 在程序中利用调用对应验证方法getInstance()获取实例...
本文实例为大家分享了android端生成随机验证码的具体代码,供大家参考,具体内容如下 package com.nobeg.util; import java.util.Random; import android.graphics.Bitmap; import android.graphics.Canvas; ...
实例147 随机读写Java类文件 221 第3篇 Java面向对象编程 第8章 面向对象(教学视频:72分钟) 226 8.1 类 226 实例148 简单的通讯录类 226 实例149 简单的长度单位转换类 227 实例150 ...
实例147 随机读写Java类文件 221 第3篇 Java面向对象编程 第8章 面向对象(教学视频:72分钟) 226 8.1 类 226 实例148 简单的通讯录类 226 实例149 简单的长度单位转换类 227 实例150 卡车和...