java 验证码

来源:互联网 发布:大六壬排盘软件安卓版 编辑:程序博客网 时间:2024/06/05 18:53
/** * 生成验证码图片 * @param request * @param response * @throws IOException */@RequestMapping(value = "user/authImage", method = { RequestMethod.POST, RequestMethod.GET })@ResponseBodypublic void doAuthImage(HttpServletRequest request, HttpServletResponse response) throws IOException {String rand = null;        response.setHeader("Pragma","No-cache");             response.setHeader("Cache-Control","no-cache");             response.setDateHeader("Expires", 0);          response.setContentType("image/jpeg");OutputStream toClient = response.getOutputStream();rand = iVideoCloudService.doAuthImage(toClient);if (rand != null) {request.getSession().setAttribute("rand", rand);}}


public String doAuthImage(OutputStream toClient) {String rand = "";int width=100, height=25;             BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);             Font mFont = new Font("Times New Roman", Font.PLAIN, 24);             Graphics g = image.getGraphics();             Random random = new Random();             g.setColor(getRandColor(200,250));             g.fillRect(1, 1, width-1, height-1);             g.setColor(new Color(102,102,102));             g.drawRect(0, 0, width-1, height-1);             g.setFont(mFont);             g.setColor(getRandColor(160,200));                 //画随机线             for (int i=0;i<155;i++)             {                 int x = random.nextInt(width - 1);                 int y = random.nextInt(height - 1);                 int xl = random.nextInt(6) + 1;                 int yl = random.nextInt(12) + 1;                 g.drawLine(x,y,x + xl,y + yl);             }                 //从另一方向画随机线             for (int i = 0;i < 70;i++)             {                 int x = random.nextInt(width - 1);                 int y = random.nextInt(height - 1);                 int xl = random.nextInt(12) + 1;                 int yl = random.nextInt(6) + 1;                 g.drawLine(x,y,x - xl,y - yl);             }                 //生成随机数,并将随机数字转换为字母                 for (int i=0;i<4;i++)             {                 int itmp = random.nextInt(26) + 65;                 char ctmp = (char)itmp;                 rand += String.valueOf(ctmp);                 g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));                 g.drawString(String.valueOf(ctmp),20*i+13,23);             }                    g.dispose();             try {ImageIO.write(image, "JPEG", toClient);} catch (IOException e) {return null;}return rand;}


0 0