验证码


验证码使用

验证码生成步骤

  1. 创建图片缓存对象BufferedImage
  2. 画图
  3. 生成随机数据
  4. 填充到图片中
  5. 干扰线
  6. 将图片展示到前端页面
package com.servlet;

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;

/**
 * @author LiYang
 * 验证码生成并展示
 */
@SuppressWarnings("all")
@WebServlet("/CheckCode")
public class CheckCodeServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        int width = 100;
        int height = 50;
        resp.setCharacterEncoding("utf-8");
        //resp.setContentType("text/html;charset=utf-8");

        // 1. 创建一个对象,在内存中代表图片
        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

        // 2. 画图
        Graphics g = image.getGraphics();
        // 2.1 填充
        g.setColor(Color.RED);
        g.fillRect(0, 0, width, height);

        //2.2 画边框
        g.setColor(Color.BLACK);
        g.drawRect(0, 0, width-1, height-1);

        String s = "ABCDEFGHIGKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";

        //生成随机数据
        Random random = new Random();

        g.setFont(new Font("黑体",Font.BOLD, 35));
        String str = "";
        for (int j = 0; j < 4 ; j++) {
            int index = random.nextInt(s.length());
            str += String.valueOf(s.charAt(index));
            g.drawString(String.valueOf(s.charAt(index)), 20* j, 40);
        }

        //设置干扰线
        g.setColor(Color.GREEN);

        for(int i = 0; i< 6; i++){
            int x1 = random.nextInt(width);
            int x2 = random.nextInt(width);
            int y1 = random.nextInt(height);
            int y2 = random.nextInt(height);
            g.drawLine(x1, y1, x2, y2);
        }

        System.out.println(str);
        req.setAttribute("CheckCode",str);

        // 图片输出展示
//        PrintWriter writer = resp.getWriter();
//        writer.write("<form action=\"\" method=\"post\" id=\"form1\">\n" +
//                "    请输入验证码:<input type=\"text\" id=\"reset\" name=\"kayValue\" />\n" +
//                "    <input type=\"submit\" value=\"验证\" />\n" +
//                "</form>");
        ImageIO.write(image, "jpg", resp.getOutputStream());

    }
}

文章作者: KawYang
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 KawYang !
评论
  目录