广告
返回顶部
首页 > 资讯 > 后端开发 > Python >基于Hutool的图片验证码功能模块实现
  • 967
分享到

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

Hutool图片验证码Hutool图片验证码 2022-11-13 18:11:58 967人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录简介Hutool名称的由来基于Hutool的图片验证码功能模块实现1.背景2.方案设计2.1 方案步骤2.2 Hutool工具类引入2.5 方案交互图3.模块编写4.接口测试简介

简介

Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关api学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。

Hutool中的工具方法来自每个用户的精雕细琢,它涵盖了Java开发底层代码中的方方面面,它既是大型项目开发中解决小问题的利器,也是小型项目中的效率担当;

Hutool是项目中“util”包友好的替代,它节省了开发人员对项目中公用类和公用工具方法的封装时间,使开发专注于业务,同时可以最大限度的避免封装不完善带来的bug。

Hutool名称的由来

Hutool = Hu + tool,是原公司项目底层代码剥离后的开源库,“Hu”是公司名称的表示,tool表示工具。Hutool谐音“糊涂”,一方面简洁易懂,一方面寓意“难得糊涂”。

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

1.背景

为了提高系统的安全性,防止接口被暴力刷新,验证码是个好的手段,图片验证码没有短信验证码的费用,其是个人开发者学习的重点。

2.方案设计

2.1 方案步骤

  • 引入Hutool工具集
  • 安装Redis
  • 接入Reids配置

2.2 Hutool工具类引入

<dependency>
        <groupId>cn.hutool</groupId>
        <artifactId>hutool-all</artifactId>
        <version>5.8.8</version>
    </dependency>
    <dependency>
        <groupId>redis.clients</groupId>
        <artifactId>jedis</artifactId>
        <version>3.7.0</version>
    </dependency>

2.3 安装Redis

默认端口:6379
- 下载连接 https://GitHub.com/tporadowski/redis/releases
- 解压
- 双击redis-server.exe启动服务端
- 双击redis-cli.exe启动客户端连接服务端

2.4 接入Reids配置

在ClassPath(或者src/main/resources)的config目录下下新建redis.setting

#-------------------------------------------------------------------------------
# Redis客户端配置样例
# 每一个分组代表一个Redis实例
# 无分组的Pool配置为所有分组的共用配置,如果分组自己定义Pool配置,则覆盖共用配置
# 池配置来自于:Https://www.cnblogs.com/jklk/p/7095067.html
#-------------------------------------------------------------------------------

#----- 默认(公有)配置
# 地址,默认localhost
host = localhost
# 端口,默认6379
port = 6379
# 超时,默认2000
timeout = 2000
# 连接超时,默认timeout
connectionTimeout = 2000
# 读取超时,默认timeout
soTimeout = 2000
# 密码,默认无
# 如果提示密码错误换成:Auth = 
passWord = 
# 数据库序号,默认0
database = 0
# 客户端名,默认"Hutool"
clientName = Hutool
# SSL连接,默认false
ssl = false;

#----- 自定义分组的连接
[custom]
# 地址,默认localhost
host = localhost
# 连接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认true
BlockWhenExhausted = true;
# 设置的逐出策略类名, 默认DefaultEvictionPolicy(当连接超过最大空闲时间,或连接数超过最大空闲连接数)
evictionPolicyClassName = org.apache.commons.pool2.impl.DefaultEvictionPolicy
# 是否启用pool的jmx管理功能, 默认true
jmxEnabled = true;
# 是否启用后进先出, 默认true
lifo = true;
# 最大空闲连接数, 默认8个
maxIdle = 8
# 最小空闲连接数, 默认0
minIdle = 0
# 最大连接数, 默认8个
maxTotal = 8
# 获取连接时的最大等待毫秒数(如果设置为阻塞时BlockWhenExhausted),如果超时就抛异常, 小于零:阻塞不确定的时间,  默认-1
maxWaitMillis = -1
# 逐出连接的最小空闲时间 默认1800000毫秒(30分钟)
minEvictableIdleTimeMillis = 1800000
# 每次逐出检查时 逐出的最大数目 如果为负数就是 : 1/abs(n), 默认3
numTestsPerEvictionRun = 3;
# 对象空闲多久后逐出, 当空闲时间>该值 且 空闲连接>最大空闲数 时直接逐出,不再根据MinEvictableIdleTimeMillis判断  (默认逐出策略)
SoftMinEvictableIdleTimeMillis = 1800000
# 在获取连接的时候检查有效性, 默认false
testOnBorrow = false
# 在空闲时检查有效性, 默认false
testWhileIdle = false
# 逐出扫描的时间间隔(毫秒) 如果为负数,则不运行逐出线程, 默认-1
timeBetweenEvictionRunsMillis = -1

2.5 方案交互图

client server redis uuid generate: Image code JSON)(code, time) setnx(uid, jsON) save result send result opt [send option] uid + code get uid JSON(code, time) check code true? check result opt [check option] client server redis

3.模块编写

VerificationImageCodeService.java

package com.example.basePro.sevice;

import com.example.basePro.bean.dto.Result;
import com.example.basePro.bean.model.ImageCode;


public interface VerificationImageCodeService {

    
    String generateImageCode(String uuid);

    
    Result<String> chechImageCode(String uuid, String code) throws Exception;
}

package com.example.basePro.sevice.Impl;

import cn.hutool.captcha.CaptchaUtil;
import cn.hutool.captcha.LineCaptcha;
import cn.hutool.db.NoSQL.redis.RedisDS;
import cn.hutool.json.JSONUtil;
import com.example.basePro.bean.dto.Result;
import com.example.basePro.bean.model.ImageCode;
import com.example.basePro.sevice.VerificationImageCodeService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import redis.clients.jedis.Jedis;



@Slf4j
@Service
public class VerificationImageCodeServiceImpl implements VerificationImageCodeService {

    
    @Value("${constants.expire.second: 600}")
    private Long expireSecond;


    @Override
    public String generateImageCode(String uuid) {
        String key = uuid;
        Jedis jedis = RedisDS.create().getJedis();

        LineCaptcha lineCaptcha = CaptchaUtil.createLineCaptcha(100, 50);
        log.info("image code is {}", lineCaptcha.getCode());

        jedis.del(key);

        // 存入缓存
        ImageCode imageCode = ImageCode.builder()
                .code(lineCaptcha.getCode())
                .createTime(System.currentTimeMillis())
                .build();
        jedis.setex(key, expireSecond, JSONUtil.toJsonStr(imageCode));

        // 浏览器中输入 data:image/png;base64, + base64, 即可显示图片
        return lineCaptcha.getImageBase64();
    }

    @Override
    public Result<String> chechImageCode(String uuid, String code) throws Exception {
        String key = uuid;

        Jedis jedis = RedisDS.create().getJedis();

        // 获取缓存中数据
        String cache = jedis.get(key);
        ImageCode imageCode = JSONUtil.toBean(cache, ImageCode.class);

        if (StringUtils.isEmpty(cache)){
            throw new Exception("验证码已过期");
        }

        // 验证码不匹配
        if(!code.equals(imageCode.getCode())){
            throw new Exception("验证码错误");
        }
        jedis.del(key);
        return Result.success("验证成功");
    }
}

4.接口测试

访问获取图片验证码接口:

http://localhost:8080/captcha/getcode?uuid=123456

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

在浏览器中输入:

data:image/png;base64,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

访问验证接口:

http://localhost:8080/captcha/check?uuid=123456&code=****

5.参考文献

Redis客户端封装-RedisDS

到此这篇关于基于Hutool的图片验证码功能模块实现的文章就介绍到这了,更多相关Hutool图片验证码内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 基于Hutool的图片验证码功能模块实现

本文链接: https://www.lsjlt.com/news/169515.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • 基于Hutool的图片验证码功能模块实现
    目录简介Hutool名称的由来基于Hutool的图片验证码功能模块实现1.背景2.方案设计2.1 方案步骤2.2 Hutool工具类引入2.5 方案交互图3.模块编写4.接口测试简介...
    99+
    2022-11-13
    Hutool图片验证码 Hutool图片验证码
  • springboot图片验证码功能模块
    目录前言:第一步:工具类第二步:图片生成:整合到springboot项目中:前言: 大家好!我是小小!今天我们用五分钟来用springboot实现我们常用的图形验证码功能模块! 用户...
    99+
    2022-11-13
  • springboot图片验证码功能模块怎么实现
    本篇内容主要讲解“springboot图片验证码功能模块怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“springboot图片验证码功能模块怎么实现”吧!具体效果如下:工具类该工具类为生...
    99+
    2023-06-30
  • JS实现图片验证码功能
    本文实例为大家分享了JS实现图片验证码功能的具体代码,供大家参考,具体内容如下 以下代码可以直接copy运行,不需要引入jquery.jar 1. html代码 <%@ pag...
    99+
    2022-11-13
  • Java实现图片验证码功能
    简介 在实现登录功能时,一般为了安全都会设置验证码登录,为了防止某个用户用特定的程序暴力破解方式进行不断的尝试登录。常见验证码分为图片验证码和短信验证码,还有滑动窗口模块和选中指定物...
    99+
    2022-11-13
  • Spring Security基于过滤器实现图形验证码功能
    目录前言一. 验证码简介二. 基于过滤器实现图形验证码1. 实现概述2. 创建新模块3. 添加依赖包4. 创建Producer对象5. 创建生成验证码的接口6. 自定义异常7. 创建...
    99+
    2022-11-12
  • JS如何实现图片验证码功能
    本篇内容主要讲解“JS如何实现图片验证码功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JS如何实现图片验证码功能”吧!1. html代码<%@ page langu...
    99+
    2023-06-30
  • jsp实现简单图片验证码功能
    本文实例为大家分享了jsp实现简单图片验证码的具体代码,供大家参考,具体内容如下 一、实现的功能分析 (1)在登陆页面加验证码的功能,起到一定的安全性。在输入正确的验证码,用户名和密...
    99+
    2022-11-13
  • 基于C#实现图片滑动验证码的示例代码
    目录图片准备合成目标实现1.创建项目2.Nuget添加ImageSharp3.vscode打开4.引入图片5.生成out_bg.jpg6.生成out_slider.png全部代码最后...
    99+
    2022-11-13
  • SpringBoot整合kaptcha实现图片验证码功能
    目录栗子配置文件SpringBoot项目中pom.xml文件项目代码项目结构SpringBootVerifyCodeApplication.javaVerifyCodeConfig....
    99+
    2022-11-13
  • Android 简单的实现滑块拼图验证码功能
    目录实现过程:接下来我们对这个库进行介绍:实现滑块拼图验证码功能之前已经写过一篇了,上一篇使用的是自定义控件的方式实现这个功能,主要还是想让童鞋们知其然更知其所以然,还没看的童鞋可以...
    99+
    2022-11-11
  • Android 如何实现滑块拼图验证码功能
    本篇内容主要讲解“Android 如何实现滑块拼图验证码功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Android 如何实现滑块拼图验证码功能”吧!本篇主要从两方面进行介绍:使用依赖库实现...
    99+
    2023-06-14
  • 基于OAuth2.0授权系统的验证码功能的实现
    前言: 前一阵子,我自己一直在写一套后台管理系统《hanxiaozhang 后台管理系统》,后台技术栈基于SpringCloud组件实现的,授权则是使用的OAuth2.0。为了让系统...
    99+
    2022-11-12
  • 基于jquery实现的上传图片及图片大小验证、图片预览效果代码
    jquery实现上传图片及图片大小验证、图片预览效果代码 上传图片验证 复制代码 代码如下: */ function submit_upload_picture(){ var fil...
    99+
    2022-11-21
    上传图片 图片大小验证 预览
  • 怎么用Springboot +redis+Kaptcha实现图片验证码功能
    这篇文章主要介绍了怎么用Springboot +redis+Kaptcha实现图片验证码功能的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么用Springboot +redis+Kaptc...
    99+
    2023-06-29
  • android实现一个图片验证码倒计时功能
    1.如图所示,要实现一个验证码的倒计时的效果                &n...
    99+
    2023-05-30
    android 验证码 倒计时
  • NodeJS 实现手机短信验证模块阿里大于功能
    1,NodeJS 安装阿里大于模块 切换到项目目录使用npm 安装阿里于模块 npm i node-alidayu --save 2,aliyu官网使用淘宝账户登录 登录阿里大于 https://do...
    99+
    2022-06-04
    阿里 手机短信 模块
  • Springboot +redis+谷歌开源Kaptcha实现图片验证码功能
    背景 注册-登录-修改密码一般需要发送验证码,但是容易被攻击恶意调⽤什么是短信-邮箱轰炸机手机短信轰炸机是批、循环给手机无限发送各种网站的注册验证码短信的方法。公司带来的损失短信1条...
    99+
    2022-11-13
  • 如何在Android中实现一个滑块拼图验证码功能
    本篇文章给大家分享的是有关如何在Android中实现一个滑块拼图验证码功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、实现步骤:定义自定义属性; 2、确认目标位置,这里使...
    99+
    2023-06-06
  • PHP怎么实现基于梦网云的手机短信验证码功能
    这篇“PHP怎么实现基于梦网云的手机短信验证码功能”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“PHP怎么实现基于梦网云的手...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作