DBMNG数据库管理与应用

所谓独创的能力,就是经过深思的模仿。

一个web系统使用的JavaServlet验证码源代码(产生的是数字字符串)

import java.io.IOException;
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;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.util.*;

/**
 * 登录验证码servlet实例
 */
public class LoginCaptcha extends HttpServlet {
	private static final long serialVersionUID = 1L; 
   
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("image/png");
		VerCodeCreate(response.getOutputStream(),request,response);
	}
	 public void VerCodeCreate(ServletOutputStream out,HttpServletRequest request,
			    HttpServletResponse response)
		    {	
			 out.clear(); //设置页面不缓存 
			 response.setHeader("Pragma","No-cache");
			 response.setHeader("Cache-Control","no-cache");
			 response.setDateHeader("Expires", 0);
			 
			// 在内存中创建图象
			int width = 60, height = 20;
			BufferedImage image = new BufferedImage(width, height,
				BufferedImage.TYPE_INT_RGB);
			// 获取图形上下文
			Graphics g = image.getGraphics();
			// 生成随机类
			Random random = new Random();
			// 设定背景色
			// g.setColor(getRandColor(200,250));
			// g.fillRect(0, 0, width, height);
			g.setColor(new Color(255, 255, 255));
			g.fillRect(0, 0, width, height);
			// 设定字体
			g.setFont(new Font("Arial", Font.PLAIN, 18));
			// 画边框
			// g.setColor(getRandColor(160,200));
			// g.drawRect(0,0,width-1,height-1);
			// 随机产生64条干扰线,使图象中的认证码不易被其它程序探测到
			g.setColor(getRandColor(160, 200));
			for (int i = 0; i < 64; 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);
			}

			// 取随机产生的认证码(4位数字)
			String sRand = "";
			for (int i = 0; i < 4; i++)
			{
			    String rand = String.valueOf(random.nextInt(10));
			    sRand += rand;
			    // 将认证码显示到图象中
			    g.setColor(new Color(20 + random.nextInt(110), 20 + random
				    .nextInt(110), 20 + random.nextInt(110)));
			    
			    g.drawString(rand, 13 * i + 6, 16);
			}

			HttpSession session=request.getSession(true);//如果没有该session,则自动创建一个新的
			// 将认证码存入SESSION
			session.setAttribute("yanzhengma", sRand);
			// 图象生效
			g.dispose();
			// 输出图象到页面
			try
			{
			    ImageIO.write(image, "PNG", response.getOutputStream());
			} catch (IOException e)
			{
			    // TODO Auto-generated catch block
			    e.printStackTrace();
			}
		    }

		    Color getRandColor(int fc, int bc)
		    {
			// 给定范围获得随机颜色
			Random random = new Random();
			if (fc > 255)
			    fc = 255;
			if (bc > 255)
			    bc = 255;
			int r = fc + random.nextInt(bc - fc);
			int g = fc + random.nextInt(bc - fc);
			int b = fc + random.nextInt(bc - fc);
			return new Color(r, g, b);
		    }
}
本站文章内容,部分来自于互联网,若侵犯了您的权益,请致邮件chuanghui423#sohu.com(请将#换为@)联系,我们会尽快核实后删除。
Copyright © 2006-2023 DBMNG.COM All Rights Reserved. Powered by DEVSOARTECH            豫ICP备11002312号-2

豫公网安备 41010502002439号