public class AuthorizationCode extends BaseAction { static final long serialVersionUID = 19881218; // 明明的生日 public void getVoid() throws IOException { response.setContentType("image/jpeg"); 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(new Color(255, 255, 255)); g.fillRect(0, 0, width, height); // 设定字体 g.setFont(new Font("Comic Sans MS", Font.PLAIN, 18)); // 画边框 g.setColor(this.getRndColor()); // g.drawRect(0,0,width-1,height-1); // 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到 g.setColor(this.getRndColor()); for (int i = 0; i < 10; 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(127, 127, 127));// 调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成 g.drawString(rand, 13 * i + 6, 16); } request.getSession().setAttribute("AuthorizationCode", sRand); // 图象生效 g.dispose(); ServletOutputStream responseOutputStream = response.getOutputStream(); // 输出图象到页面 ImageIO.write(image, "JPEG", responseOutputStream); // 以下关闭输入流! responseOutputStream.flush(); responseOutputStream.close(); } private Color getRndColor() {// 给定范围获得随机颜色 return new Color(this.rnd(), this.rnd(), this.rnd()); } /** 随机生成0-255的数字* */ private int rnd() { java.util.Random random = new java.util.Random(); return random.nextInt(255); } /** 把除了大小写字母和数字外的字符全过滤掉* */ @SuppressWarnings("unused") private char filter(int k) { if (k < 65) k = 48 + (k % 10); if (k > 64 && k < 96) k = 65 + (k % 26); if (k > 96) k = 97 + (k % 26); return (char)k; } /** 取得一个随机字体* */ @SuppressWarnings("unused") private String getRndFontNames() { GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); String[] k = ge.getAvailableFontFamilyNames(); java.util.Random r = new java.util.Random(); return k[r.nextInt(k.length)]; } }