java实现登录页面的验证码功能
2017-10-09 10:36
483 查看
我们访问电商网站,登录账号时。都需要验证码的输入。那么在java中,我们是如何实现验证码的呢?这里,我用servelet做个demo。
代码清单:
测试:
代码清单:
package com.test; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.IOException; import java.util.Random; import javax.imageio.ImageIO; 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 javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class ValidateCodeServle */ @WebServlet("/ValidateCodeServle") public class ValidateCodeServle extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public ValidateCodeServle() { 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 doPost(request, response); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 响应头信息 response.setHeader("Pragma", "No-Cache"); response.setHeader("Cache-Control", "no-cache"); response.setDateHeader("Expries", 0); // 随机数生成类 Random random = new Random(); // 定义验证码的位数 int size = 5; // 定义变量保存生成的验证码 String vCode = ""; char c; // 产生验证码 for (int i = 0; i < size; i++) { // 产生一个26以内的随机整数 int number = random.nextInt(26); // 如果生成的是偶数,则随机生成一个数字 if< c583 /span> (number % 2 == 0) { c = (char) ('0' + (char) ((int) (Math.random() * 10))); // 如果生成的是奇数,则随机生成一个字母 } else { c = (char) ((char) ((int) (Math.random() * 26)) + 'A'); } vCode = vCode + c; } // 保存生成的5位验证码 request.getSession().setAttribute("vCode", vCode); // 验证码图片的生成 // 定义图片的宽度和高度 int width = (int) Math.ceil(size * 20); int height = 30; BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); // 获取图片的上下文 Graphics gr = image.getGraphics(); // 设定图片背景颜色 gr.setColor(Color.WHITE); gr.fillRect(0, 0, width, height); // 设定图片边框 gr.setColor(Color.GRAY); gr.drawRect(0, 0, width - 1, height - 1); // 画十条干扰线 for (int i = 0; i < 5; i++) { int x1 = random.nextInt(width); int y1 = random.nextInt(height); int x2 = random.nextInt(width); int y2 = random.nextInt(height); gr.setColor(randomColor()); gr.drawLine(x1, y1, x2, y2); } // 设置字体,画验证码 gr.setColor(randomColor()); gr.setFont(randomFont()); gr.drawString(vCode, 10, 22); // 图像生效 gr.dispose(); // 输出到页面 ImageIO.write(image, "JPEG", response.getOutputStream()); } // 生成随机的颜色 private Color randomColor() { int red = r.nextInt(150); int green = r.nextInt(150); int blue = r.nextInt(150); return new Color(red, green, blue); } private String[] fontNames = { "宋体", "华文楷体", "黑体", "微软雅黑", "楷体_GB2312" }; private Random r = new Random(); // 生成随机的字体 private Font randomFont() { int index = r.nextInt(fontNames.length); String fontName = fontNames[index];// 生成随机的字体名称 int style = r.nextInt(4); int size = r.nextInt(3) + 24; // 生成随机字号, 24 ~ 28 return new Font(fontName, style, size); } }
测试:
相关文章推荐
- java spring 实现登录页面添加验证码
- Java学习日记9:登录时验证码的功能以及实现
- java实现自动登录无验证码登录后台并保持会话状态持续监控固定页面信息。
- 【学习笔记⑦】登录页面怎样实现验证码登录功能
- java实现验证码生成,解决在页面验证时候session获得的总是前一次值的问题
- Java实现随机验证码功能
- Java实现随机验证码功能实例
- 关于在所有页面实现没有登录就转到登录页面的功能
- 用Java实现随机验证码功能
- ASP.NET jQuery 食谱11 (通过使用jQuery validation插件简单实现用户登录页面验证功能)
- jsp中未登录用户也可以浏览页面的功能实现代码
- JAVA SPRING MVC 实现一个简单的页面显示功能
- Flex结合java实现一个登录功能
- ASP.NET jQuery 实例11 通过使用jQuery validation插件简单实现用户登录页面验证功能
- Flex结合java实现一个登录功能
- 使用技巧:Java实现随机验证码功能实例
- Java实现随机验证码功能实例
- JAVA实现一个登录窗体功能
- Java实现随机验证码功能实例
- java web中实现同一帐号同一时间只能一个地点登陆(类似QQ登录的功能)