验证码的生成和使用
2015-07-29 09:54
288 查看
1.jsp页面
2.imageServlet用于生成验证码,且把生成的验证码以session形势保存
3.表单提交到的servlet,负责把验证码从session中得到并与提交的用户填写的验证码比较
验证码<input name="checkcode" type="text"> <img src="imageServlet" id="imageCode" alt="验证码" title="验证码"> <a href="javaScript:reLoadCode()">看不清</a><br/> <script type="text/javascript"> alert("欢迎登录"); function reLoadCode(){ var time = new Date().getTime(); document.getElementById("imageCode").src="imageServlet?id="+time; } </script>
2.imageServlet用于生成验证码,且把生成的验证码以session形势保存
public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException { /*1、BufferedImage图像数据缓冲区 2、Graphics绘制图片 3、Color获取颜色 4、Random生成随机数 5、ImageIo输出图片*/ BufferedImage bi = new BufferedImage(70, 40, BufferedImage.TYPE_INT_RGB); Graphics g = bi.getGraphics(); Color c = g.getColor(); g.setColor(Color.yellow); g.fillRect(0, 0, 70, 40); char[] ch= "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890".toCharArray(); Random r = new Random(); StringBuffer sb = new StringBuffer(); for(int i=0; i<4; i++) { int index = r.nextInt(ch.length); Font f = new Font("宋体", Font.BOLD, 40); g.setFont(f); g.setColor(new Color(r.nextInt(255),r.nextInt(255), r.nextInt(255))); g.drawString(ch[index]+"", i*15+3, 28); sb.append(ch[index]); } request.getSession().setAttribute("pop", sb.toString()); ImageIO.write(bi, "JPG", response.getOutputStream()); }
3.表单提交到的servlet,负责把验证码从session中得到并与提交的用户填写的验证码比较
String s1 = (String) request.getSession().getAttribute("pop"); String s2 = request.getParameter("checkcode"); if(true == flag && s1.equalsIgnoreCase(s2)) { //if(c.equalsIgnoreCase(parm)) out.write("success"); } else { out.write("error"); }
相关文章推荐
- diffrence between [[[[UIApplication sharedApplication] delegate] window] and [[UIApplication sharedA
- HDU-1867-A + B for you again
- 最长回文子串长度
- 使用自增长键列值的统计信息
- java开发过程中对于乱码问题的解决方法
- 九成用户都在电视上玩游戏是种什么体验?
- PC上简单的的文件传输方法(主要是虚拟机)
- 网站性能优化的三重境界
- shiro使用手册
- 官方移动应用开发教程Rad Studio Mobile Tutorials Version XE8
- poj3295 -- Tautology--构造法
- (转)python学习笔记——Thread常用方法
- sizeof小览
- 用api函数打开串口,获取系统时间
- 《C#高级编程》【第八章】委托、lambda表达式和事件 -- 学习笔记
- Swift:subscript
- 四元数与欧拉角(yaw roll pitch)转换公式与推导,以及它们unity中的不同
- HDOJ 5316 Magician 线段树
- 前端规范(持续)
- 关于类似新浪微博的后台问题