发送图片验证码

验证码源代码

参考博客:https://blog.csdn.net/qq_42262675/article/details/80719594

	@RequestMapping(value="graphCode",method = RequestMethod.GET)
    @ResponseBody
    public Map<String, String> graphCode(HttpServletResponse response){
        //服务器通知浏览器不要缓存
        response.setHeader("pragma", "no-cache");
        response.setHeader("cache-control", "no-cache");
        response.setHeader("expires", "0");

        //在内存中创建一个长80,宽30的图片,默认黑色背景
        //参数一:长
        //参数二:宽
        //参数三:颜色
        int width = 80;
        int height = 30;
        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

        //获取画笔
        Graphics g = image.getGraphics();
        //设置画笔颜色为灰色 背景色
        g.setColor(Color.lightGray);
        //填充图片
        g.fillRect(0, 0, width, height);

        //产生4个随机验证码,12Ey
        String checkCode = getCheckCode();
        //将验证码放入redis中
        redisService.set("GRAPH_CODE",checkCode,120L);
        //设置画笔颜色为黑色 code颜色
        g.setColor(Color.black);
        //设置字体的小大
        g.setFont(new Font("宋体", Font.BOLD, 20));
        //向图片上写入验证码
        g.drawString(checkCode, 18, 22);
        //画干扰线
        drawLine(image);
        //将内存中的图片输出到浏览器
        //参数一:图片对象
        //参数二:图片的格式,如PNG,JPG,GIF
        //参数三:图片输出到哪里去
        Map<String,String> map = new HashMap<>(2);
        try {
            ImageIO.write(image, "PNG", response.getOutputStream());
        } catch (IOException e) {
            map.put("state","999");
            map.put("msg","服务器异常");
        }

        return map;
    }
    /**
     * 产生4位随机字符串
     */
    private String getCheckCode() {
        String base = "23456789ABCDEFGHJKLMNPQRSTUVWXYZ";
        int size = base.length();
        Random r = new Random();
        StringBuffer sb = new StringBuffer();
        for (int i = 1; i <= 4; i++) {
            //产生0到size-1的随机值
            int index = r.nextInt(size);
            //在base字符串中获取下标为index的字符
            char c = base.charAt(index);
            //将c放入到StringBuffer中去
            sb.append(c);
        }
        return sb.toString();
    }



    /**
     * 画干扰线
     * @param image
     */
    private void drawLine(BufferedImage image) {
        Graphics2D g2 = (Graphics2D) image.getGraphics();
        g2.setStroke(new BasicStroke(1.5F));
        //干扰线是黑色
        g2.setColor(Color.BLACK);
        //画线
        g2.drawLine(15, 18, 60, 18);

    }

结语:前端显示图片验证码并能点击图片重新请求方法;

<input type="Captcha" class="Captcha" name="vcode" placeholder="请输入验证码!">
                < img width="100px" height="50px" src="http://127.0.0.1:8080/register/graphCode" onclick='src="http://127.0.0.1:8080/register/graphCode?"+new Date()'>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值