JavaWeb实现登录验证码功能

准备一个验证码

protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //禁用缓存
        resp.setHeader("Pragma", "No-cache");
        resp.setHeader("Cache-Control", "No-cache");
        resp.setDateHeader("Expires", 0);

        //根据自己的背景图片设置照片格式
        resp.setContentType("image/jpg");

        int height = 60;
        int width = 140;

        //画板
        BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
        //画笔
        Graphics graphics = image.getGraphics();

        //设置字体
        Font font = new Font("宋体",Font.BOLD,25);
        graphics.setFont(font);

        //图像输入流,它是从当前已注册 ImageReader 中自动选择的,解码所提供 URL 的结果。
        String imagePath = req.getServletContext().getRealPath("img/ba.jpg");
        Image image1 = ImageIO.read(new File(imagePath));
        //绘制指定图像中已缩放到适合指定矩形内部的图像
        graphics.drawImage(image1,0,0,140,60,null);

        //准备好验证码所需的字符串
        String resource = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
        //用于保存验证码
        String info = "";
        //循环四次,从字符串中随机获取四个字符
        for (int i = 0; i < 4; i++) {
            //从字符串中随机获取索引
            int index = new Random().nextInt(resource.length() - 1);
            char myCode = resource.charAt(index);
            Random random = new Random();
            //设置颜色
            graphics.setColor(new Color(20 + random.nextInt(200),20 + random.nextInt(200),20 + random.nextInt(200)));
            //显示文本,设置x,y的偏距
            graphics.drawString(myCode + "",30 + i * 20,35 + new Random().nextInt(10));
            //生成干扰线
            graphics.drawLine(random.nextInt(100),random.nextInt(40),random.nextInt(100),random.nextInt(40));
            //存入info
            info += myCode;
        }

        //设置到session提供给前台
        req.getSession().setAttribute("info",info);

        //释放资源
        graphics.dispose();
        //图像输出流
        OutputStream out = resp.getOutputStream();
        ImageIO.write(image,"jpg",out);
        //关流
        out.flush();
        out.close();
    }

前台显示

因为是图像输出,所以要准备一个img,它的src就填写验证码的servlet

JavaWeb实现登录验证码功能_第1张图片

在准备一个click函数,鼠标单击时,刷新验证码

效果展示

JavaWeb实现登录验证码功能_第2张图片

到这里,JavaWeb实现登录验证码功能就结束了,希望对你有帮助!!!

你可能感兴趣的:(java,servlet)