我的编程空间,编程开发者的网络收藏夹
学习永远不晚

怎么用Springboot +redis+Kaptcha实现图片验证码功能

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

怎么用Springboot +redis+Kaptcha实现图片验证码功能

这篇文章主要介绍了怎么用Springboot +redis+Kaptcha实现图片验证码功能的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么用Springboot +redis+Kaptcha实现图片验证码功能文章都会有所收获,下面我们一起来看看吧。

背景

  • 注册-登录-修改密码一般需要发送验证码,但是容易被攻击恶意调⽤

  • 什么是短信-邮箱轰炸机

  • 手机短信轰炸机是批、循环给手机无限发送各种网站的注册验证码短信的方法。

  • 公司带来的损失

  • 短信1条5分钱,如果被大盗刷大家自己计算 邮箱通知不用钱,但被大盗刷,带宽、连接等都被占用,导致无法正常使用

  • 如何避免自己的网站成为”肉鸡“或者被刷呢

  • 增加图形验证码(开发人员)

  • 单IP请求次数限制(开发人员)

  • 限制号码发送(一般短信提供商会做)

  • 攻防永远是有的,只过加大了攻击者的成本,ROI划不过来⾃然就放弃了

Kaptcha 框架介绍

谷歌开源的一个可高度配置的实用验证码生成工具

  • 验证码的字体/大小/颜色

  • 验证码内容的范围(数字,字母,中文汉字!)

  • 验证码图⽚的大小,边框,边框粗细,边框颜色

  • 验证码的⼲扰线 验证码的样式(鱼眼样式、3D、普通 模糊)

添加依赖

<!--kaptcha依赖包--><dependency> <groupId>com.baomidou</groupId> <artifactId>kaptcha-spring-bootstarter</artifactId> <version>1.0.0</version> </dependency>

配置类

@Configurationpublic class CaptchaConfig {        @Bean    @Qualifier("captchaProducer")    public DefaultKaptcha kaptcha() {        DefaultKaptcha kaptcha = new DefaultKaptcha();        Properties properties = new Properties();        //验证码个数        properties.setProperty(Constants.KAPTCHA_TEXTPRODUCER_CHAR_LENGTH, "4");        //字体间隔        properties.setProperty(Constants.KAPTCHA_TEXTPRODUCER_CHAR_SPACE,"8");        //⼲扰线颜⾊        //⼲扰实现类        properties.setProperty(Constants.KAPTCHA_NOISE_IMPL, "com.google.code.kaptcha.impl.NoNoise");        //图⽚样式        properties.setProperty(Constants.KAPTCHA_OBSCURIFICATOR_IMPL,                "com.google.code.kaptcha.impl.WaterRipple");        //⽂字来源        properties.setProperty(Constants.KAPTCHA_TEXTPRODUCER_CHAR_STRING, "0123456789");        Config config = new Config(properties);        kaptcha.setConfig(config);        return kaptcha;    }}

实战

我的配置类

获取访问ip和生成MD5的工具类

public class CommonUtil {        public static String    getIpAddr(HttpServletRequest request) {        String ipAddress = null;        try {            ipAddress = request.getHeader("xforwarded-for");            if (ipAddress == null ||                    ipAddress.length() == 0 ||                    "unknown".equalsIgnoreCase(ipAddress)) {                ipAddress =                        request.getHeader("Proxy-Client-IP");            }                        request.getHeader("WL-Proxy-Client-IP");                        request.getRemoteAddr();                if                (ipAddress.equals("127.0.0.1")) {                    // 根据⽹卡取本机配置的IP                    InetAddress inet = null;                    try {                        inet =                                InetAddress.getLocalHost();                    } catch (UnknownHostException e) {                        e.printStackTrace();                    }                    ipAddress =                            inet.getHostAddress();                }            // 对于通过多个代理的情况,第⼀个IP为客户端真实IP,多个IP按照','分割            if (ipAddress != null &&                    ipAddress.length() > 15) {                // "***.***.***.***".length()                // = 15                if (ipAddress.indexOf(",") > 0)                {                            ipAddress.substring(0, ipAddress.indexOf(","));        } catch (Exception e) {            ipAddress="";        }        return ipAddress;    }    public static String MD5(String data) {            java.security.MessageDigest md =                    MessageDigest.getInstance("MD5");            byte[] array =                    md.digest(data.getBytes("UTF-8"));            StringBuilder sb = new                    StringBuilder();            for (byte item : array) {                sb.append(Integer.toHexString((item & 0xFF) |                        0x100).substring(1, 3));            return sb.toString().toUpperCase();        } catch (Exception exception) {        return null;}

接口开发

@RestController@RequestMapping("/api/v1/captcha")public class CaptchaController {    @Autowired    private StringRedisTemplate stringRedisTemplate;        private Producer producer;    @RequestMapping("get_captcha")    public void getCaptcha(HttpServletRequest request, HttpServletResponse response){        String captchaText = producer.createText();        String key = getCaptchaKey(request);        // 十分钟过期        stringRedisTemplate.opsForValue().set(key,captchaText,10, TimeUnit.MINUTES);        BufferedImage image = producer.createImage(captchaText);        ServletOutputStream outputStream=null;        try {            outputStream= response.getOutputStream();            ImageIO.write(image,"jpg",outputStream);            outputStream.flush();            outputStream.close();        } catch (IOException e) {            e.printStackTrace();        }    }        private String getCaptchaKey(HttpServletRequest request){        String ipAddr = CommonUtil.getIpAddr(request);        // 请求头        String userAgent=request.getHeader("user-Agent");        String key="user_service:captcha:"+CommonUtil.MD5(ipAddr+userAgent);        return key;}

配置文件

server:  port: 8080spring:  redis:    host: redis锁在的ip    password: redis的密码    port: 端口号    lettuce:      pool:        # 连接池最⼤连接数(使⽤负值表示没有限制)        max-idle: 10        # 连接池中的最⼤空闲连接        max-active: 10        # 连接池中的最⼩空闲连接        min-idle: 0        # 连接池最⼤阻塞等待时间(使⽤负值表示没有限制)        max-wait: -1ms

结果

怎么用Springboot +redis+Kaptcha实现图片验证码功能

关于“怎么用Springboot +redis+Kaptcha实现图片验证码功能”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“怎么用Springboot +redis+Kaptcha实现图片验证码功能”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

怎么用Springboot +redis+Kaptcha实现图片验证码功能

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

怎么用Springboot +redis+Kaptcha实现图片验证码功能

这篇文章主要介绍了怎么用Springboot +redis+Kaptcha实现图片验证码功能的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么用Springboot +redis+Kaptcha实现图片验证码功
2023-06-29

SpringBoot+kaptcha怎么实现验证码

本篇内容主要讲解“SpringBoot+kaptcha怎么实现验证码”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SpringBoot+kaptcha怎么实现验证码”吧!1. 基本用法kaptc
2023-06-30

SpringBoot使用Kaptcha实现验证码的生成与验证功能

这篇文章主要介绍了SpringBoot使用Kaptcha实现验证码的生成与验证功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2023-03-13

springboot图片验证码功能模块怎么实现

本篇内容主要讲解“springboot图片验证码功能模块怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“springboot图片验证码功能模块怎么实现”吧!具体效果如下:第一步:工具类该工
2023-06-30

SpringBoot 集成Kaptcha实现验证码功能实例详解

在一个web应用中验证码是一个常见的元素。不管是防止机器人还是爬虫都有一定的作用,我们是自己编写生产验证码的工具类,也可以使用一些比较方便的验证码工具。在网上收集一些资料之后,今天给大家介绍一下kaptcha的和springboot一起使用
2023-05-31

SpringBoot如何使用Kaptcha实现验证码的生成与验证功能

本篇内容主要讲解“SpringBoot如何使用Kaptcha实现验证码的生成与验证功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SpringBoot如何使用Kaptcha实现验证码的生成与验
2023-07-05

springboot验证码生成及验证功能怎么实现

这篇“springboot验证码生成及验证功能怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“springboot验证
2023-07-06

JS如何实现图片验证码功能

本篇内容主要讲解“JS如何实现图片验证码功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JS如何实现图片验证码功能”吧!1. html代码<%@ page language="java" co
2023-06-30

Springboot+SpringSecurity怎么实现图片验证码登录

本文小编为大家详细介绍“Springboot+SpringSecurity怎么实现图片验证码登录”,内容详细,步骤清晰,细节处理妥当,希望这篇“Springboot+SpringSecurity怎么实现图片验证码登录”文章能帮助大家解决疑惑
2023-06-30

spring boot结合kaptcha怎么实现一个验证码登陆功能

本篇文章给大家分享的是有关spring boot结合kaptcha怎么实现一个验证码登陆功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。引入kaptcha所需要的jar包,我
2023-05-31

php怎么实现图片验证码

php实现图片验证码的方法:1、加载GD扩展;2、创建画布并在画布上增加内容;3、通过imagepng保存输出;4、释放资源;5、生成随机验证码数据即可。
2017-09-20

基于Hutool的图片验证码功能模块实现

为了提高系统的安全性,防止接口被暴力刷新,验证码是个好的手段,图片验证码没有短信验证码的费用,其是个人开发者学习的重点,这篇文章主要介绍了基于Hutool的图片验证码功能模块实现,需要的朋友可以参考下
2022-11-13

android实现一个图片验证码倒计时功能

1.如图所示,要实现一个验证码的倒计时的效果 2.实现  图中获取验证码那块是一个button按钮  关键部分,声明一个TimeCount,继承自CountDownTimer/*验证码
2023-05-30

短信验证码校验功能如何利用SpringBoot实现

本篇文章为大家展示了短信验证码校验功能如何利用SpringBoot实现,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。思路用户输入手机号后,点击按钮获取验证码。并设置冷却时间,防止用户频繁点击。后台生
2023-05-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录