Java实现拖拉/滑动图片验证码
环境条件
- JDK1.8
- MAVEN-3.3
- spring-boot-2.1.17.RELEASE
- Redis
源码+DEMO+单元测试下载地址(有问题可关注并私信博主解决)
https://download.youkuaiyun.com/download/m0_38138879/19386954
用户行为验证码(拖动图片)
实现思路
1.一个文件夹存储大小一致的背景图;另外一个文件存储高度跟背景图一致,但是宽度不一致的拖动图(需要UI将空白位置设置为透明);上述两文件夹支持可配置路径和容错的默认路径.
2.项目启动完成时一次性全部背景图和拖动图转为字节或Base64缓存起来(可改为redis);前端请求图片验证码时候在随机取缓存中的一张背景图片和一张拖动图。
private void cacheBackgroundImage(){
if(StrUtil.isNotBlank(config.getBackgroundImagePath())&& FileUtil.isDirectory(config.getBackgroundImagePath())){
log.info("开始加载文件路径为:{}的拖拉验证码背景图..",config.getBackgroundImagePath());
for(File file :FileUtil.loopFiles(config.getBackgroundImagePath())){
if(file.isDirectory()){
continue;
}
BASE64_BACKGROUND_IMAGE.put(file.getName(), Base64.encode(file));
}
log.info("完成加载文件路径为:{}的拖拉验证码背景图..",config.getBackgroundImagePath());
}
//加载默认的背景图
if(BASE64_BACKGROUND_IMAGE.isEmpty()){
log.info("开始加载默认路径为:defaultImage/background/的5张拖拉验证码背景图..");
BASE64_BACKGROUND_IMAGE.put("1.jpg",Base64.encode(IoUtil.readBytes(
ClassUtil.getClassLoader().getResourceAsStream("defaultImage/background/1.jpg"),true)