1、在pom文件中先导入生成图像的依赖包

<dependency>
<groupId>com.baomidou</groupId>
<artifactId>kaptcha-spring-boot-starter</artifactId>
<version>1.0.0</version>
</dependency>

2、在config写配置类

@Configuration
public class CaptchaConfig {
/**
* 验证码配置
* Kaptcha配置类名
*
* @return
*/
@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;
}
}

3、配置好redis相关的配置

4、存入redis

  1. 根据请求获取客户ip作为key,方法如下:
  2. **
    * 获取ip
    * @param request
    * @return
    */
    public static String getIpAddr(HttpServletRequest request) {
    String ipAddress = null;
    try {
    ipAddress = request.getHeader("x-forwarded-for");
    if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
    ipAddress = request.getHeader("Proxy-Client-IP");
    }
    if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
    ipAddress = request.getHeader("WL-Proxy-Client-IP");
    }
    if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
    ipAddress = 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 = ipAddress.substring(0, ipAddress.indexOf(","));
    }
    }
    } catch (Exception e) {
    ipAddress="";
    }
    return ipAddress;
    }

5、controller类编写

@RestController
@RequestMapping("/api/v1/captchar")
public class CaptCharController { @Autowired
private RedisTemplate redisTemplate; @Autowired
private Producer captchaProducer; @GetMapping("get_captcha")
public void getCaptChar(HttpServletRequest request, HttpServletResponse response){ String producerText = captchaProducer.createText();
String key = getKey(request);
//设置过期时间为10分钟
redisTemplate.opsForValue().set(key,producerText,10, TimeUnit.MINUTES); BufferedImage image = captchaProducer.createImage(producerText); ServletOutputStream outputStream = null;
try {
outputStream = response.getOutputStream();
ImageIO.write(image,"jpg",outputStream);
outputStream.flush();
outputStream.close();
}catch (Exception e){
e.fillInStackTrace();
} } @GetMapping("check")
public String check(HttpServletRequest request, HttpServletResponse response, @RequestParam String value){
String key = getKey(request);
String v = (String) redisTemplate.opsForValue().get(key);
if (v.equals(value)){
return "验证成功";
}else {
return "校验失败";
}
} private String getKey(HttpServletRequest request){
String ipAddr = CommonUtil.getIpAddr(request);
String header = request.getHeader("User-Agent");
String key = "user-service:captcha:"+CommonUtil.MD5(ipAddr+header);
return key;
} }

redis获取图形验证码的更多相关文章

  1. jmeter 获取图形验证码接口测试

    今天开发提测了一个图形验证码的接口,以前没有测过这个,上来有点懵..... 记录一下. 使用jmeter配置好接口和参数,运行后查看结果树,显示都是乱码 解决方法: 添加一个后置处理器--beansh ...

  2. 务必收藏备用:.net core中通过Json或直接获取图形验证码(数字验证码、字母验证码、混合验证码),有源代码全实战demo(开源代码.net core3.0)

    很多人写的博客大家看了会一知半解,不知道怎么用,应该引用什么类库或者代码不全,这样很多小白很是头疼,尤其是尝新技术更是如此.我们这边不止告诉你步骤,而且还提供开源demo.随着时间的推移,我们的dem ...

  3. vue 项目,获取手机验证码和图形验证码(iviewUI框架)

    1.编辑获取验证码模块 <Form ref="phoneFormItem" :model="phoneFormItem" :label-width=&qu ...

  4. python爬虫中图形验证码的处理

    使用python爬虫自动登录时,遇到需要输入图形验证码的情况,一个比较简单的处理方法是使用打码平台识别验证码. 使用过两个打码平台,打码兔和若快,若快的价格更便宜,识别率相当.若快需要注册两个帐号:开 ...

  5. springmvc的文件上传和JWT图形验证码

    相关pom依赖 <dependency> <groupId>commons-fileupload</groupId> <artifactId>commo ...

  6. Java Web项目使用图形验证码 — Kaptcha

    一.验证码介绍 生成的主要方式: 1.使用Java原生的方式,其中包含了Servlet.AWT.ImageIO的使用: 2.使用开源库,例如Jcaptcha.Kaptcha...: (各图形验证码开源 ...

  7. 04 . Go+Vue开发一个线上外卖应用(用户名密码和图形验证码)

    图形化验证码生成和验证 功能介绍 在使用用户名和密码登录功能时,需要填写验证码,验证码是以图形化的方式进行获取和展示的. 验证码使用原理 验证码的使用流程和原理为:在服务器端负责生成图形化验证码,并以 ...

  8. 【无私分享:ASP.NET CORE 项目实战(第十四章)】图形验证码的实现

    目录索引 [无私分享:ASP.NET CORE 项目实战]目录索引 简介 很长时间没有来更新博客了,一是,最近有些忙,二是,Core也是一直在摸索中,其实已经完成了一个框架了,并且正在准备在生产环境中 ...

  9. PHP5 GD库生成图形验证码(汉字)

    PHP5 GD库生成图形验证码且带有汉字的实例分享. 1,利用GD库函数生成图片,并在图片上写指定字符imagecreatetruecolor 新建一个真彩色图像imagecolorallocate ...

  10. PHP5生成图形验证码(有汉字)

    利用PHP5中GD库生成图形验证码 类似于下面这样 1.利用GD库函数生成图片,并在图片上写指定字符 imagecreatetruecolor   新建一个真彩色图像      imagecolora ...

随机推荐

  1. Min_25 Sieve 学习笔记

    这个东西不是人想的. 解决问题:积性函数前缀和. 适用条件:可以快速计算 \(f(p)\) 的前缀和,\(f(p^k)\) 可以被表示成若干完全积性函数的线性组合(指对应项可以快速组合出来). 时空复 ...

  2. combox下拉框控件

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  3. NAT模式下Debian无法上网和VIM无法删除字符的处理方法

    NAT模式下Debian无法上网的处理方法 处理方法共分为二种 检测 VM 的 NAT 服务有无开启 查看虚拟机的网络信息设置是否正确 检测 VM 的 NAT 服务有无开启 win+R 输入 serv ...

  4. 以图搜图功能实现(windows10版)

    1,原理 存储:通过Core项目调取python接口,python通过使用towhee把图片转成向量存在milvus向量数据库中. 查询:通过Core项目调取python接口,python根据查询的图 ...

  5. python发送钉钉消息通用脚本

    1.使用shell生成需要发送的内容. 2.调用该脚本发送文本内容python3,其中的文件 /wj/sbjk,需要改成直接需要发送的文件. [root@manager dingding]# more ...

  6. java正则解析ip

    public class test { public static void main(String[] args) { // TODO Auto-generated method stub Stri ...

  7. 错误 : 资产文件&ldquo;\obj\project.assets.json&rdquo;没有&ldquo;.NETCoreApp,Version=v2.0&rdquo;的目标。确保已运行还原,且&ldquo;netcoreapp2.0&rdquo;已包含在项目的 TargetFrameworks 中。

    原因是项目升级了目标框架netcoreapp2.1但是发布配置文件上的目标框架配置项没有更改导致发布错误 将此处修改成需要的版本即可.例如:<TargetFramework>netcore ...

  8. K8S的 POD 生命周期

    pod的生命周期是从创建至终止的这段时间范围 Pod的创建 1.用户通过kubectl或其他api客户端提交需要创建的pod信息给apiServer 2.apiServer开始生成pod对象的信息,并 ...

  9. 面试题 --MySQL索引

    InnoDB引擎与MyISAM引擎的区别 ? InnoDB支持事务,MyISAM不支持事务 InnoDB支持行级锁,表级锁,MyISAM只支持表级锁 InnoDB支持外键,MyISAM不支支持外键 I ...

  10. Pytest初识

    一.单元测试框架简介 1. 什么是单元测试 单元测试是指在软件开发过程中,针对软件的最小单位(函数,方法)进行正确性的检查测试. 2. 常用单元测试框架 2.1 Java 类别 junit testn ...