注册页面的验证码的实现
2015-07-24 18:07
363 查看
验证码
主要:绘制,验证
在一些网站的注册页面,通常在最后会让用户输入验证码,以此防止恶意注册,有些也会在登陆页面,防止暴力破解密码等.
页面的验证码,实际上是一个图片,这个图片事先人们是不知道的,它是由程序随机绘制成的,并且,在产生的时候,程序记录下来了它的值.(便于后面的验证)
servlet 服务器小程序,可以实现绘制验证码的功能,绘制的步骤如下:
1.建立图片缓存对象
BufferImage bi = new BufferImage(width,height,绘制类型参数);
原型:BufferedImage(arg0, arg1, arg2)
2.得到绘制对象
Graphics g = bi.getGraphics();
3.设置底纹颜色
Color c = new Color(arg0,arg1,arg2);// 3个参数分别是三原色的值.
g.setColor(c);
g.fillRect(0, 0, 70, 30); //填充矩形,0,0 表示的起始点.
4.产生随机数字,得到随机字符,对图像进行绘制 (并且记录下来)
字符区间:char[] ch = "asdfghjklzxcvbnmASDFGHJKLZXCVBNM123456789".toCharArray();
字符缓存:StringBuffer sb = new StringBuffer();
随机数 :Random r = new Random();
//逐个绘制随机字符 并设置特定的颜色
for(int i=0;i<4;i++)
{
int index = r.nextInt(ch.length()); //产生一个随机数
//对字符分别设置绘制字体颜色
g.setFont(new Font("宋体",Font.Bold,20)); //设置宋体,20号字体
g.setColor(new Color(r.nexInt(255),r.nexInt(255),r.nexInt(255))); //设置随机颜色,
g.drawString(ch[index]+" ",i*20,25); //绘制字符,后面的参数为位置
sb.append(ch[index]); //添加字符到字符缓存区,(追加)
}
request.getSession().setAttribute("picCode",sb.toString()); //将验证码放到session中,方便后面的验证
5.通过图片IO写到前台
ImageIO.write(bi,"JPG",response.getOutputStream()); //通过输出流写到前台, JPG格式
到这里就能够在页面上面看到随机生成的验证码图片了.
[b]验证:[/b]
验证就是在注册界面或者是登陆界面活取验证码 ,然后从session中活取验证码,然后二者比较相等,验证是否输入正确.
从session中活取验证码
String checkCode = request.getSession().getAttribute("picCode");
从前台活取输入的验证码
String code = request.getParameter("code");
验证
if(checkCode.equalsIgnoreCase(code)==false) response.sendRedirect("register.jsp"); //验证不成功跳转到制定页面
至此,验证码的相关基础的内容已经完毕,
代码:
myImage.java (servlet程序)
View Code
主要:绘制,验证
在一些网站的注册页面,通常在最后会让用户输入验证码,以此防止恶意注册,有些也会在登陆页面,防止暴力破解密码等.
页面的验证码,实际上是一个图片,这个图片事先人们是不知道的,它是由程序随机绘制成的,并且,在产生的时候,程序记录下来了它的值.(便于后面的验证)
servlet 服务器小程序,可以实现绘制验证码的功能,绘制的步骤如下:
1.建立图片缓存对象
BufferImage bi = new BufferImage(width,height,绘制类型参数);
原型:BufferedImage(arg0, arg1, arg2)
2.得到绘制对象
Graphics g = bi.getGraphics();
3.设置底纹颜色
Color c = new Color(arg0,arg1,arg2);// 3个参数分别是三原色的值.
g.setColor(c);
g.fillRect(0, 0, 70, 30); //填充矩形,0,0 表示的起始点.
4.产生随机数字,得到随机字符,对图像进行绘制 (并且记录下来)
字符区间:char[] ch = "asdfghjklzxcvbnmASDFGHJKLZXCVBNM123456789".toCharArray();
字符缓存:StringBuffer sb = new StringBuffer();
随机数 :Random r = new Random();
//逐个绘制随机字符 并设置特定的颜色
for(int i=0;i<4;i++)
{
int index = r.nextInt(ch.length()); //产生一个随机数
//对字符分别设置绘制字体颜色
g.setFont(new Font("宋体",Font.Bold,20)); //设置宋体,20号字体
g.setColor(new Color(r.nexInt(255),r.nexInt(255),r.nexInt(255))); //设置随机颜色,
g.drawString(ch[index]+" ",i*20,25); //绘制字符,后面的参数为位置
sb.append(ch[index]); //添加字符到字符缓存区,(追加)
}
request.getSession().setAttribute("picCode",sb.toString()); //将验证码放到session中,方便后面的验证
5.通过图片IO写到前台
ImageIO.write(bi,"JPG",response.getOutputStream()); //通过输出流写到前台, JPG格式
到这里就能够在页面上面看到随机生成的验证码图片了.
[b]验证:[/b]
验证就是在注册界面或者是登陆界面活取验证码 ,然后从session中活取验证码,然后二者比较相等,验证是否输入正确.
从session中活取验证码
String checkCode = request.getSession().getAttribute("picCode");
从前台活取输入的验证码
String code = request.getParameter("code");
验证
if(checkCode.equalsIgnoreCase(code)==false) response.sendRedirect("register.jsp"); //验证不成功跳转到制定页面
至此,验证码的相关基础的内容已经完毕,
代码:
myImage.java (servlet程序)
package cn.hpu.servlet; import java.io.IOException; import java.io.PrintWriter; import java.sql.Date; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.catalina.connector.Response; import cn.hpu.model.user; import cn.hpu.service.StuManager; import cn.hpu.service.StuManagerimplement; /** * Servlet implementation class register */ @WebServlet("/register") public class register extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public register() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub response.getWriter().append("Served at: ").append(request.getContextPath()); doPost(request, response); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub // doGet(request, response); //设置中文 request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); //获取数据 String name = request.getParameter("name"); String pwd = request.getParameter("password"); String code = request.getParameter("code"); String checkCode = (String) request.getSession().getAttribute("picCode"); user usr = new user(); usr.setName(name); usr.setCode(code); usr.setPassword(pwd); if(checkCode.equalsIgnoreCase(code)==false){ // PrintWriter out = response.getWriter(); // out.println("验证码错误!\n3秒后自动跳转注册页面"); response.sendRedirect("register.jsp"); } StuManager stuM = new StuManagerimplement(); boolean flag= false ; try { flag = stuM.add(usr); if(flag) response.sendRedirect("index.jsp"); } catch (Exception e) { // TODO: handle exception } } }
View Code
相关文章推荐
- HDU 2005 第几天?
- 如何在Ubuntu 14.04上安装轻量级的Budgie桌面
- 自定义互斥变量
- ios官方示例demo
- MapView 和ViewPager Fragment切换黑屏问题解决方案
- 解决Spring MVC ResponseBody 乱码问题
- 关于Oracle的疑问
- 扩展欧几里德算法求逆元3
- Palindrome Linked List
- 脏读、不可重复读 共享锁、悲观锁 和 事务五种隔离级别
- 150723培训心得(queue)
- Assertion failed (ni > 0 && ni == ni1) in collectCalibrationData
- HDU 1042--N! 【大数】
- android:layout_weight的含义
- 拓展欧几里德算法求逆元2
- ASP.NET Web API 特性
- Unity3D使用经验总结 缺点篇
- 【BLE】CC2541之指令周期
- Jsr181HandlerMapping
- java机制