Kaptcha验证码实现

文章目录

    • 实现流程
    • 用户认证

实现流程

1.先引用了google的验证码生成器(Kaptcha)

      <dependency><groupId>com.github.axet</groupId><artifactId>kaptcha</artifactId><version>0.0.9</version></dependency>

2.编写Kaptcha的配置类(KaptchaConfig)

/*** 验证码生成配置类*/
@Configuration
public class KaptchaConfig {@Beanpublic DefaultKaptcha producer() {Properties properties = new Properties();properties.put("kaptcha.border", "no");properties.put("kaptcha.textproducer.font.color", "black");properties.put("kaptcha.textproducer.char.space", "4");properties.put("kaptcha.image.height", "40");properties.put("kaptcha.image.width", "120");properties.put("kaptcha.textproducer.font.size", "30");Config config = new Config(properties);DefaultKaptcha defaultKaptcha = new DefaultKaptcha();defaultKaptcha.setConfig(config);return defaultKaptcha;}
}

注: 可以根据自己的喜好,在参数里面对验证码的宽度,高度,大小,颜色等进行修改

3.控制层调用接口信息

@RestController
@Slf4j
public class AuthorController {@Autowiredprivate Producer producer;@Autowiredprivate RedisUtil redisUtil;/*** 验证码* @return*/@GetMapping("/captcha")public Result captcha() throws IOException {String code = producer.createText();String key = UUID.randomUUID().toString();BufferedImage image = producer.createImage(code);ByteArrayOutputStream outputStream = new ByteArrayOutputStream();ImageIO.write(image, "jpg", outputStream);BASE64Encoder encoder = new BASE64Encoder();log.info(code);String str = "data:image/jpeg;base64,";String base64Img = str + encoder.encode(outputStream.toByteArray());// 存储到redis中redisUtil.hset(SysytemContors.CAPTCHA_KEY, key,code,120);log.info("验证码 -- {} - {}", key, code);return Result.succ(MapUtil.builder().put("token", key).put("captchaImg", base64Img).build());}
}

这里我们通过我们之前写的配置类Producer生成一串验证码,同时也通过UUID生成1串随机的Key值,便于我们之后存入到redis中,通过ImageIO的write方法写出一个JPG格式的图片,最后响应给前端,
我们响应的数据
在这里插入图片描述

用户认证

当用户认证自己身份时,我们应该先检验用户输入的验证码,接着再检验用户的密码和账户,因此我们需要添加一个验证码的过滤器链

@Component
@Slf4j
public class CaptchaFilter extends OncePerRequestFilter {@Autowiredprivate RedisUtil redisUtil;@Autowiredprivate LoginFailureHandler loginFailureHandler;@Overrideprotected void doFilterInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, FilterChain filterChain) throws ServletException, IOException {//应该先判断该请求是否是Login请求String requestURI = httpServletRequest.getRequestURI();//判断该请求路径是否为登录请求,且请求方式为POST请求if("/login".equals(requestURI) && httpServletRequest.getMethod().equals("POST")){//检查验证码try {checkCaptch(httpServletRequest);}catch (CaptchException captchException){log.info(captchException.getMessage());loginFailureHandler.onAuthenticationFailure(httpServletRequest, httpServletResponse, captchException);}}//成功的话直接放行filterChain.doFilter(httpServletRequest, httpServletResponse);}

我们应先判断用户的请求是否为Login请求,请求方式是否为POST请求,再去验证输入的验证码是否正确,

/*** 校验验证码的流程*/private void checkCaptch(HttpServletRequest httpServletRequest){//先获取用户的CodeString code = httpServletRequest.getParameter("code");String key = httpServletRequest.getParameter("key");//用户没有填验证码if(!StringUtils.hasText(code) || !StringUtils.hasText(key)){throw new CaptchException("验证码异常");}if(!code.equals(redisUtil.hget(SysytemContors.CAPTCHA_KEY, key))){throw new CaptchException("验证码异常");}//从redis中删除redisUtil.hdel(SysytemContors.CAPTCHA_KEY, key);}

注:当我们在验证完验证码后,我们就把该验证码从redis中删除。

最后我们需要将该过滤器链加入SpringSecurity的配置类中
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/2754.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于kaptcha插件来实现验证码功能(超级简单,超级好用)

目录 导入kaptcha依赖到项目中 在web.xml中配置相关的配置&#xff08;KaptchaServlet本质是一个Servlset&#xff09; 使用插件完成注册功能 导入kaptcha依赖到项目中 maven工程形式&#xff1a;导入 Kaptcha依赖 <!-- Kaptcha验证码组件 --> <dependen…

使用kaptcha快速生成验证码

文章目录 kaptcha会员注册和登录&#xff1a; 第一步&#xff0c;在Maven仓库中引入Kaptcha依赖&#xff08;注意将新的jar&#xff0c;进行发布) 第二步&#xff0c;在applicationContext.xml文件中配置Kaptcha 第三步&#xff0c;创建Controller类&#xff0c;生成Kaptcha代码…

使用kaptcha生成验证码

前言 说到生成验证码&#xff0c;我们第一个想到的就是kaptcha包&#xff0c;因为这个包已经存在很久了&#xff0c;比较稳定&#xff0c;用的人也多网上的示例代码多&#xff0c;而且很多项目脚手架做验证时也都是用这个框架的。 代码 添加依赖 <!-- 验证码 --><d…

kaptcha验证码使用

效果图&#xff1a; 官方地址&#xff1a;https://code.google.com/p/kaptcha/w/list 1、把下载的kaptcha-2.3.2.jar添加到lib中 2、配置web.xml增加servlet <servlet> <servlet-name>Kaptcha</servlet-name> <servlet-class>com.goog…

验证码Kaptcha的使用

引言 Kaptcha是一个非常实用的验证码生成工具&#xff0c;可以通过配置生成多样化的验证码。以图片的形式显示&#xff0c;从而无法进行复制粘贴。 1.引入Maven依赖 <!-- https://mvnrepository.com/artifact/com.github.penggle/kaptcha --><dependency><gro…

验证码captcha

通过使用Django的第三方库进行快速开发 安装软件 pip install django-simple-captcha 配置setting 使用python manage.py startapp user应用后在setting.py中添加 自定义forms.py 在应用下创建forms.py并添加如下&#xff1a; from django import forms from captcha.…

登录验证码实现(Captcha)

登录验证码 登录验证是一般系统都会有的功能&#xff0c;验证的方式也多种多样&#xff0c;比如输入式验证码&#xff0c;拖动式验证条&#xff0c;拖动式验证拼图等等。 我们这里先实现常规的输入验证码的方式&#xff0c;右边显示验证码图片&#xff0c;点击可刷新&#xf…

使用chatgpt过funcaptcha验证码3个人学习记录

funcaptcha 验证码3 通过记录 往期验证码&#xff1a;http://t.csdn.cn/ulgXY funcaptcha1 往期验证码&#xff1a;http://t.csdn.cn/3xMnZ funcaptcha2 funcaptcha 那个公司开发的简要介绍&#xff1a; Funcaptcha是由hCaptcha公司开发的一种人机验证系统。hCaptcha是一家位…

使用chatgpt过funcaptcha验证码2个人学习记录

funcaptcha 验证码2 通过记录 ** funcaptcha 那个公司开发的简要介绍&#xff1a; Funcaptcha是由hCaptcha公司开发的一种人机验证系统。hCaptcha是一家位于美国的人机验证技术提供商&#xff0c;旨在帮助网站和应用程序防止自动化攻击和滥用。 Funcaptcha是hCaptcha提供的一种…

chatgpt赋能python:Python如何获取手机短信验证码

Python如何获取手机短信验证码 在现代社会里&#xff0c;验证码已经成为了各种网站、APP、银行等机构对用户身份认证的必备手段。从有用性角度考虑&#xff0c;我们需要确保验证码的真实有效性&#xff0c;从而保护用户信息的安全。而为了方便用户接收验证码&#xff0c;手机短…

chatgpt赋能python:Python爬虫绕过验证码的技巧及实现方法

Python爬虫绕过验证码的技巧及实现方法 在进行网络爬虫过程中&#xff0c;验证码常常会给我们带来种种困扰&#xff0c;如何绕过验证码是广大爬虫开发者必须面对的难题之一。在本文中&#xff0c;我们将介绍一些有助于解决验证码问题的技巧和实现方法。 什么是验证码 验证码…

chatgpt赋能python:Python判断验证码是否正确

Python判断验证码是否正确 验证码是一种用于防止机器人攻击的技术&#xff0c;现在被广泛地使用在网站登录、注册、找回密码等场景中。以图片形式出现的验证码&#xff0c;可以让机器难以破解或自动化攻击&#xff0c;提供了更加安全的体验。在Python中&#xff0c;我们可以使…

chatgpt赋能python:Python发送短信验证码教程-从入门到实战

Python发送短信验证码教程 - 从入门到实战 作为一名有10年Python编程经验的工程师&#xff0c;我深知短信验证码在很多场景下的重要性。比如注册、登录、重置密码等&#xff0c;都需要使用短信验证码来确认用户的真实性。 Python是一种非常强大的编程语言&#xff0c;可以很方…

五分钟创建一个ChatGPT Plugin

OpenAI 在2023年3月发布了 ChatGPT 的官方 API &#xff0c;且于今天发布了Plugin开发使用资格&#xff0c;许多开发者和创业者都兴致勃勃地想办法将其整合到自己的业务运营中。 但是&#xff0c;想要做到这一点&#xff0c;仍然困难重重&#xff1a; OpenAI为 ChatGPT 提供了…

还不懂如何与chatGPT高效交流?保姆级且全面的chatGPT提示词工程教程来啦!(二)进阶篇

还不懂如何与chatGPT高效交流&#xff1f;保姆级且全面的chatGPT提示词工程教程来啦&#xff01;&#xff08;二&#xff09;进阶篇 基础篇中&#xff0c;教了如何通过遵循四个基本要义向chatGPT清楚的表达出你的需求。下面是四要义的提纲&#xff0c;忘记了可以复习一下还不懂…

当ChatGPT遇上弱智…

每天给你送来NLP技术干货&#xff01; 来自&#xff1a;量子位 点击这里进群—>加入NLP交流群 没想到&#xff0c;无敌如弱智吧&#xff0c;也有被ChaGPT“反将一军”的时候。 提问AI“咱们来玩个马吃草的扮演游戏吧&#xff0c;我草你马。” AI咀嚼了一下这句话&#xff0c…

事半功倍,使用ChatGPT编写Python函数

如何使用 ChatGPT 编写 Python 函数 微信搜索关注《Python学研大本营》&#xff0c;加入读者群&#xff0c;分享更多精彩 在这篇文章中&#xff0c;我将分享如何使用 ChatGPT 来帮助我编程的过程。我们将看到它在哪些方面做得好&#xff0c;在哪些方面做得不好。 TLDR&#x…

使用ChatGPT提升Python编程效率

作为Python开发者&#xff0c;如何使用 OpenAI ChatGPT提升Python变成效率。 微信搜索关注《Python学研大本营》&#xff0c;加入读者群&#xff0c;分享更多精彩 OpenAI 的聊天工具是一个基于网络的聊天界面&#xff0c;允许用户使用名为“ChatGPT”的 OpenAI 语言模型进行交…

ChatGPT连接企微

目录 一、下载企业微信项目地址 二、创建应用 三、配置应用 3.1、这里需要记录上你的AgentId与Secret&#xff0c;然后点击下面的设置API接收&#xff0c;设置下面的参数&#xff0c;现在还保存不了&#xff0c;进行下一步&#xff1a;服务器运行应用 3.2 、API接受消息界…

ChatGPT is fun, but not an author(有兴趣加入ChatGPT群)ChatGPT利与弊分析

关注并星标 从此不迷路 计算机视觉研究院 公众号ID&#xff5c;ComputerVisionGzq 学习群&#xff5c;扫码在主页获取加入方式 计算机视觉研究院专栏 作者&#xff1a;Edison_G 在不到两个月的时间里&#xff0c;人工智能&#xff08;AI&#xff09;项目ChatGPT已经成为一种文化…