From 2a6791e0f842a3255e0488926866ec35eccce76d Mon Sep 17 00:00:00 2001 From: pk9tv8hgp <1215904376@qq.com> Date: Mon, 24 Apr 2023 13:13:21 +0800 Subject: [PATCH] Add ValidateCodeController --- ValidateCodeController | 95 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 ValidateCodeController diff --git a/ValidateCodeController b/ValidateCodeController new file mode 100644 index 0000000..5e4c442 --- /dev/null +++ b/ValidateCodeController @@ -0,0 +1,95 @@ +package com.controller.before; +import java.awt.Color; +import java.awt.Font; +import java.awt.Graphics; +import java.awt.image.BufferedImage; +import java.io.IOException; +import java.io.OutputStream; +import java.util.Random; +import javax.imageio.ImageIO; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +/** + * 验证码 + */ +@Controller +public class ValidateCodeController { + private char code[] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', + 'k', 'm', 'n', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', + 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', + 'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '2', + '3', '4', '5', '6', '7', '8', '9' }; + private static final int WIDTH = 50; + private static final int HEIGHT = 20; + private static final int LENGTH = 4; + @RequestMapping("/validateCode") + public void validateCode(HttpServletRequest request, + HttpServletResponse response) throws ServletException, IOException { + // TODO Auto-generated method stub + // 设置响应报头信息 + response.setHeader("Pragma", "No-cache"); + response.setHeader("Cache-Control", "no-cache"); + response.setDateHeader("Expires", 0); + // 设置响应的MIME类型 + response.setContentType("image/jpeg"); + + BufferedImage image = new BufferedImage(WIDTH, HEIGHT, + BufferedImage.TYPE_INT_RGB); + Font mFont = new Font("Arial", Font.TRUETYPE_FONT, 18); + Graphics g = image.getGraphics(); + Random rd = new Random(); + + // 设置背景颜色 + g.setColor(new Color(rd.nextInt(55) + 200, rd.nextInt(55) + 200, rd + .nextInt(55) + 200)); + g.fillRect(0, 0, WIDTH, HEIGHT); + + // 设置字体 + g.setFont(mFont); + + // 画边框 + g.setColor(Color.black); + g.drawRect(0, 0, WIDTH - 1, HEIGHT - 1); + + // 随机产生的验证码 + String result = ""; + for (int i = 0; i < LENGTH; ++i) { + result += code[rd.nextInt(code.length)]; + } + HttpSession se = request.getSession(); + se.setAttribute("code", result); + + // 画验证码 + for (int i = 0; i < result.length(); i++) { + g.setColor(new Color(rd.nextInt(200), rd.nextInt(200), rd + .nextInt(200))); + g.drawString(result.charAt(i) + "", 12 * i + 1, 16); + } + + // 随机产生2个干扰线 + for (int i = 0; i < 2; i++) { + g.setColor(new Color(rd.nextInt(200), rd.nextInt(200), rd + .nextInt(200))); + int x1 = rd.nextInt(WIDTH); + int x2 = rd.nextInt(WIDTH); + int y1 = rd.nextInt(HEIGHT); + int y2 = rd.nextInt(HEIGHT); + g.drawLine(x1, y1, x2, y2); + } + + // 释放图形资源 + g.dispose(); + try { + OutputStream os = response.getOutputStream(); + + // 输出图像到页面 + ImageIO.write(image, "JPEG", os); + } catch (IOException e) { + e.printStackTrace(); + } + } +} \ No newline at end of file