栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java实现图片验证码

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java实现图片验证码

Java实现图片验证码
  • 1.创建工具类
  • 2.调用工具类,返回验证码图片
  • 3.效果

1.创建工具类

代码如下

//生成验证码,并将验证码存入session中,以ip为key
public class GetMessage {
    public static BufferedImage getMsg(HttpServletRequest request,String ip){
        int width = 60 , height = 30;
        //创建一个图像,宽60 高30
        BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
        Graphics g = image.getGraphics();
        Random random = new Random();
        g.setColor(getRandomColor(200,250));
        g.fillRect(0,0,width,height);
        g.setFont(new Font("Times New Roman",Font.PLAIN,18));
        g.setColor(getRandomColor(160,200));
        //干扰线生成
        for (int i = 0; i < 10; i++) {
            int x = random.nextInt(width);
            int y = random.nextInt(height);
            int xl = random.nextInt(12);
            int yl = random.nextInt(12);
            g.drawLine(x,y,x+xl,y+yl);
        }
        String strCode = "";
        for (int i = 0; i < 4; i++) {
            String strNumber = String.valueOf(random.nextInt(10));
            strCode = strCode+strNumber;
            //设置字体颜色
            g.drawString(strNumber,13*i+6,20);
        }
        System.out.println("当前ip"+ip);
        System.out.println("当前验证码"+strCode);
        request.getSession().setAttribute(ip,strCode);
        Common.setRedis(ip,strCode);
        g.dispose();
        return image;
    }


    
    public static Color getRandomColor (int fc , int bc){
        Random random = new Random();
        Color reandomColor = null;
        if(fc > 255){
            fc = 255;
        }
        if(bc > 255){
            bc = 255;
        }
        int r =fc + random.nextInt(bc-fc);
        int g = fc + random.nextInt(bc-fc);
        int b = fc + random.nextInt(bc-fc);
        reandomColor = new Color(r,g,b);
        return reandomColor;
    }
}
2.调用工具类,返回验证码图片

代码如下:

    
    @PostMapping("getMessage")
    @ApiOperation(value = "获取图片验证码",notes = "获取图片验证码")
    @CrossOrigin
    public void getMessage(HttpServletResponse response, HttpServletRequest request){
        response.setHeader("Pragma","No-cache");
        response.setHeader("Cache-Control","No-cache");
        response.setDateHeader("Expires",0);
        response.setContentType("image/jpeg");
        String ip=request.getRemoteAddr();
        BufferedImage image= GetMessage.getMsg(request,ip);
        try {
            ImageIO.write(image,"JPEG",response.getOutputStream());
            response.getOutputStream().flush();
            response.getOutputStream().close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

上面代码调用工具类中的方法生成验证码图片,并将图片转换为数据流response返回给前端。

3.效果

使用postman测试效果如下:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/671853.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号