• 生成验证码的控制类关键代码


    package com.tszr.eBusiness.controller.before;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    import javax.imageio.ImageIO;
    import javax.servlet.ServletException;
    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.io.IOException;
    import java.io.OutputStream;
    import java.util.Random;
    
    @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("rand", 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();
            }
        }
    }
  • 相关阅读:
    00. 以太坊私有链创世区块
    01. 以太坊部署智能合约
    IDEA 调试技巧
    CI/CD 容器服务准备
    Redis 存储机制及淘汰策略
    02. 最佳实践
    Spring 事务
    百度图片式的瀑布流
    线程
    Vue3+TS如何判断对象类型数组中包含某一个值
  • 原文地址:https://www.cnblogs.com/tszr/p/15994120.html
Copyright © 2020-2023  润新知