spring boot 图文验证码(Kaptcha)使用
用法:
可以直接去官网http://code.google.com/p/kaptcha/下载jar,或者在pom.xml中导入
<dependency><groupId>com.google.code.kaptcha</groupId><artifactId>kaptcha</artifactId><version>2.3</version>
</dependency>
或者(两者选其一即可)
<dependency><groupId>com.github.penggle</groupId><artifactId>kaptcha</artifactId><version>2.3.2</version>
</dependency>
Kaptcha 详细配置表
常量 | 描述 | 默认值 |
kaptcha.border | 图片是否有边框 | 默认true |
kaptcha.border.color | 边框颜色 | |
kaptcha.image.width | 验证码图片宽 | 默认200 |
kaptcha.image.height | 验证码图片高 | 默认50 |
kaptcha.textproducer.font.size | 验证码文本字符大小 | 默认为40 |
kaptcha.session.key |
session key KAPTCHA_SESSION_KEY |
|
kaptcha.textproducer.char.length | 验证码文本字符长度 | 默认为5 |
kaptcha.textproducer.font.names | 验证码文本字体样式 | 默认为new Font("Arial", 1, fontSize), new Font("Courier", 1, fontSize) |
kaptcha.obscurificator.impl | 图片样式 水纹com.google.code.kaptcha.impl.WaterRipple 鱼眼com.google.code.kaptcha.impl.FishEyeGimpy 阴影com.google.code.kaptcha.impl.ShadowGimpy | |
kaptcha.textproducer.impl | 验证码文本生成规则 | |
kaptcha.textproducer.char.space | 验证码文本字符间距 | 默认为2 |
kaptcha.noise.color | 验证码干扰颜色 | 默认为Color.BLACK |
kaptcha.noise.impl | 干扰实现类com.google.code.kaptcha.impl.NoNoise | |
kaptcha.background.impl | 背景实现类 | com.google.code.kaptcha.impl.DefaultBackground |
kaptcha.producer.impl |
图片实现类 com.google.code.kaptcha.impl.DefaultKaptcha |
|
kaptcha.textproducer.impl |
文本实现类 com.google.code.kaptcha.text.impl.DefaultTextCreator |
|
kaptcha.textproducer.char.string | 文本集合 | |
kaptcha.background.clear.from | 背景颜色渐变,开始颜色 | |
kaptcha.background.clear.to | 背景颜色渐变, 结束颜色 | |
kaptcha.session.date |
session date KAPTCHA_SESSION_DATE |
|
业务代码
@Service
public class CaptchaService extends BaseService {// 对应CaptchaConfig 定义的bean name@Resource(name = "captchaProducerMath")private Producer captchaProducerMath;@AutowiredRedisOps redisOps;/*** 生成图片验证码*/public DataRespBean<Map<String, Object>> getPictureCaptcha(HttpServletResponse response) throws IOException {String uuid = UUID.randomUUID().toString();String capStr = null, code = null;BufferedImage image = null;// 生成验证码String capText = captchaProducerMath.createText();//截取结果capStr = capText.substring(0, capText.lastIndexOf("@"));code = capText.substring(capText.lastIndexOf("@") + 1);image = captchaProducerMath.createImage(capStr);//结果存入redis,key为uuid 超时时间5分钟redisOps.set(RedisUtil.pictureCaptchaKey(uuid), code, 5 * 60); // 5分钟// 转换流信息写出FastByteArrayOutputStream outputStream= new FastByteArrayOutputStream();Map<String, Object> map = new HashMap<>();try {ImageIO.write(image, "jpg", outputStream);} catch (IOException e) {return new DataRespBean(ResultCodeMsg.SERVER_ERROR.getErrMsg(), e.getMessage());}finally {map.put("uuid", uuid);map.put("img", Base64Encoder.encode(outputStream.toByteArray()));os.close();}return new DataRespBean<>(map);}
}
验证码生成规则(根据实际需求修改)
public class KaptchaTextCreator extends DefaultTextCreator {private static final String[] NUMBER= "0,1,2,3,4,5,6,7,8,9,10".split(",");@Overridepublic String getText() {Integer result = 0;//结果Random random = new Random();int x = random.nextInt(10);int y = random.nextInt(10);StringBuilder chinese = new StringBuilder();int randomop = (int) random.nextInt(4)//判断结果生成加减乘除switch (randomoperands){case 0 :result = x * y;chinese.append(NUMBER[x]);chinese.append("*");chinese.append(NUMBER[y]);break;case 1 :if (!x == 0 && y % x == 0) {result = y / x;chinese.append(NUMBER[y]);chinese.append("/");chinese.append(NUMBER[x]);} else {result = x + y;chinese.append(NUMBER[x]);chinese.append("+");chinese.append(NUMBER[y]);}break;case 2 :if (x >= y) {result = x - y;chinese.append(NUMBER[x]);chinese.append("-");chinese.append(NUMBER[y]);} else {result = y - x;chinese.append(NUMBER[y]);chinese.append("-");chinese.append(NUMBER[x]);}break;default:result = x + y;chinese.append(NUMBER[x]);chinese.append("+");chinese.append(NUMBER[y]);}//拼接结果返回suChinese.append("=?@" + result);return suChinese.toString();}
生成图片验证码配置
@Configuration
public class CaptchaConfig {@Bean(name = "captchaProducerMath")public DefaultKaptcha getKaptchaBeanMath() {DefaultKaptcha defaultKaptcha = new DefaultKaptcha();Properties properties = new Properties();// 图片边框properties.setProperty(KAPTCHA_BORDER, "yes");// 边框颜色properties.setProperty(KAPTCHA_BORDER_COLOR, "105,179,90");// 文本颜色properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_COLOR, "blue");// 图片宽度 properties.setProperty(KAPTCHA_IMAGE_WIDTH, "130");// 图片高度 properties.setProperty(KAPTCHA_IMAGE_HEIGHT, "32");// 文本字符大小properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_SIZE, "28");// KAPTCHA_SESSION_KEYproperties.setProperty(KAPTCHA_SESSION_CONFIG_KEY, "KAPTCHA_SESSION_KEY");// 验证码文本生成器properties.setProperty(KAPTCHA_TEXTPRODUCER_IMPL, "对应自己的KaptchaTextCreator 文件路径");// 文本字符间距 properties.setProperty(KAPTCHA_TEXTPRODUCER_CHAR_SPACE, "3");// 文本字符长度properties.setProperty(KAPTCHA_TEXTPRODUCER_CHAR_LENGTH, "6");// 文本字体样式properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_NAMES, "Arial,Courier");// 干扰颜色properties.setProperty(KAPTCHA_NOISE_COLOR, "white");// 干扰实现类properties.setProperty(KAPTCHA_NOISE_IMPL, "com.google.code.kaptcha.impl.NoNoise");// 图片样式properties.setProperty(KAPTCHA_OBSCURIFICATOR_IMPL, "com.google.code.kaptcha.impl.ShadowGimpy");Config config = new Config(properties);defaultKaptcha.setConfig(config);return defaultKaptcha;}
}
返回结果(jpg base64编码)
效果展示
spring boot 图文验证码(Kaptcha)使用相关推荐
- Spring Boot实现验证码功能
✨Spring Boot实现验证码功能 验证码的作用 案例要求 前端页面准备 随机验证码工具类 后端控制器 测试
- Spring Boot中验证码实现kaptcha
要生成验证码网上的方案比较多,基本是基于两大类:1为自定义生成,操作用Image类,2为kaptcha生成,有模糊算法. 当然也可以直接交由前端进行处理 1.基于kaptcha 首先不要怀疑的是报名是 ...
- spring boot实现验证码登录
内容比较简单,需要完整项目的朋友留下邮箱,给你们发. 直接看效果: 下面是实现步骤 1.验证码生成工具类(引用自网络) package com.laoxu.test.helloweb.util;imp ...
- Spring Boot 配置Kaptcha(谷歌验证码工具)(生成验证码、验证验证码)
1 Kaptcha 1.1 Kaptcha简介 Kaptcha 是一个扩展自simplecaptcha的验证码库,默认情况下,Kaptcha非常易于设置和使用,并且默认输出会产生一个很难验证的验证码. ...
- spring boot 使用javaMailSender 发送qq邮箱验证码
一 qq邮箱设置 1登录邮箱打开设置 2点击账号 3开启 POP3/SMTP服务 4保存密钥(这个一定要保存后面在java里面要调用) 二. spring boot代码设置 1.maven导入jar包 ...
- 39 Spring Boot Shiro权限管理【从零开始学Spring Boot】
[视频 & 交流平台] à SpringBoot视频 http://study.163.com/course/introduction.htm?courseId=1004329008& ...
- Spring Boot Shiro视频 - 身份认证准备工作
[视频 & 交流平台] à SpringBoot视频 http://study.163.com/course/introduction.htm?courseId=1004329008& ...
- spring boot集成kaptcha图形验证码
文章目录 环境变化引发的思考 web.xml设置kaptcha图形验证码 config设置kaptcha图形验证码 kaptcha图形验证码完整教程 kaptcha图形验证码属性表 Linux环境下k ...
- Spring Boot 整合 Shiro(三)Kaptcha验证码 附源码
前言 本文是根据上篇<Spring Boot 整合Shiro(二)加密登录与密码加盐处理>进行修改,如有不明白的转上篇文章了解. 1.导入依赖 <!-- https://mvnrep ...
最新文章
- springMVC静态资源访问不到
- sql 拆分_技术分享 | 基于分布式中间件的SQL改造指南
- Oracle创建数据库(手动)
- Oracle数据类型(转)
- 网站关键词排名骤降的原因及解决办法
- python课程与c+课程有什么不同-Python学习之二:Python 与 C 区别
- 网页设计过程中一般命名规则
- 天津理工上机c语言报告5,天津理工大学c语言上机报告7.doc
- nnlm 中的 Softmax
- Android studio快捷键大全 和 eclipse对照(原)
- 修改Sql Server 2000数据库名称
- 谷歌云端语音识别软件
- “会用LabVIEW,但是却没有听说TestStand,好像有点说不过去吧!”(下)
- 软件工程:NFR与NFP
- 从生活中领悟设计模式(Python)
- 自动化有道云笔记自动签到+看广告奖励
- 汉语言01C1501,2019年北京自考汉语言文学(本科)专业(01C1501)要考哪些科目?...
- 免费注册 上传html,一些可以免费上传文件的网站
- (转)Java用native2ascii命令做unic…
- 读书笔记——Photoshop设计精讲精练