登录验证码实现(Captcha)

登录验证码

登录验证是一般系统都会有的功能,验证的方式也多种多样,比如输入式验证码,拖动式验证条,拖动式验证拼图等等。

我们这里先实现常规的输入验证码的方式,右边显示验证码图片,点击可刷新,左边输入验证码。如下图为实现的效果。

实现案例

验证码的实现需要前后端协同,脱离彼此则不可用,故将前后端的实现放在一起,不再另写前端教程。

后端

1.添加依赖

打开 kitty-admin 工程,添加maven依赖。

pom.xml

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

2.添加配置

添加验证码配置类 KaptchaConfig,配置验证码的一些样式。

KaptchaConfig.java

package com.louis.kitty.admin.config;import java.util.Properties;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import com.google.code.kaptcha.impl.DefaultKaptcha;
import com.google.code.kaptcha.util.Config;//验证码配置一般都是在web.xml中配置  springboot中 将 xml 的形势转化成代码实现
/*** 验证码配置* @author Louis* @date Oct 29, 2018*/
@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", "5");Config config = new Config(properties);DefaultKaptcha defaultKaptcha = new DefaultKaptcha();defaultKaptcha.setConfig(config);return defaultKaptcha;}
}

验证码的一些参数配置 

3.添加验证码获取接口

添加验证码获取接口,并将生成的验证码保存起来,在登录的时候用来跟前台输入验证码进行匹配。

SysLoginController.java

import com.google.code.kaptcha.Producer;
//其他引用自动注入就好  我的编辑器Producer无法自动引用@Autowiredprivate Producer producer;@Autowiredprivate StringRedisTemplate redisTemplate;@GetMapping("captcha.jpg")public void captcha(HttpServletResponse response) throws ServletException, IOException {response.setHeader("Cache-Control", "no-store, no-cache");response.setContentType("image/jpeg");// 生成文字验证码String text = producer.createText();// 生成图片验证码BufferedImage image = producer.createImage(text);// 保存到验证码到 session  (有问题 改为下方)//ShiroUtils.setSessionAttribute(Constants.KAPTCHA_SESSION_KEY, text);//原博客验证码保存到session的代码,会有一些问题。首先由于多人共用一个key值,多人使用验证码时会冲突;如果改用后面redis逻辑保存的话,session生效时间会彼此影响。此处修改为使用redis保存。每生成一个验证码,放入redis中,redis时效设置为两分钟。登陆验证时,如果该验证码存在于redis中,则验证通过,并删除该验证码redisTemplate.opsForValue().set(text,text,120, TimeUnit.SECONDS);ServletOutputStream out = response.getOutputStream();ImageIO.write(image, "jpg", out);    IOUtils.closeQuietly(out);}

4.登录接口增加验证码验证

登录接口增加验证码验证,将之前保存的验证码跟前台输入验证码进行匹配。

SysLoginController.java

/*** 登录接口*/@PostMapping(value = "/login")public HttpResult login(@RequestBody LoginBean loginBean) throws IOException {String userName = loginBean.getAccount();String password = loginBean.getPassword();String captcha = loginBean.getCaptcha();// 从session中获取之前保存的验证码跟前台传来的验证码进行匹配
//        Object kaptcha = ShiroUtils.getSessionAttribute(Constants.KAPTCHA_SESSION_KEY);
//        if(kaptcha == null){
//            return HttpResult.error("验证码已失效");
//        }
//        if(!captcha.equals(kaptcha)){
//            return HttpResult.error("验证码不正确");
//        }//改用redis读取判断Object kaptcha = redisTemplate.opsForValue().get(captcha);if(kaptcha == null){return ResponseUtil.error("验证码不正确!", "");}else{redisTemplate.delete(captcha);}// 用户信息SysUser user = sysUserService.findByName(userName);// 账号不存在、密码错误if (user == null) {return HttpResult.error("账号不存在");}if (!match(user, password)) {return HttpResult.error("密码不正确");}// 账号锁定if (user.getStatus() == 0) {return HttpResult.error("账号已被锁定,请联系管理员");}// 生成token,并保存到数据库SysUserToken data = sysUserTokenService.createToken(user.getId());return HttpResult.ok(data);}

到这里后台代码就完成了。

启动程序,访问 http://localhost:8001/captcha.jpg,如果结果如下就没问题了。

 

前端

1.添加组件

打开登录页面,在密码栏下面增加一行验证码。

<el-form-item ><el-col :span="12"><el-form-item prop="captcha"><el-input type="test" v-model="loginForm.captcha" auto-complete="off" placeholder="验证码, 单击图片刷新"style="width: 100%;"></el-input></el-form-item></el-col><el-col class="line" :span="1"> </el-col><el-col :span="11"><el-form-item><img style="width: 100%;" class="pointer" :src="loginForm.src" @click="refreshCaptcha"></el-form-item></el-col>
</el-form-item>

2.添加组件

添加验证码相关的属性,captcha是验证码值,src是验证码图片路径。

Login.vue

 

3.验证规则

添加验证码验证规则。

Login.vue

4.传入验证码

在登录接口调用的时候,一并传入验证码。

Login.vue

let userInfo = {account:this.loginForm.account, password:this.loginForm.password, captcha:this.loginForm.captcha}

5.刷新验证码

添加refreshCaptcha方法,增加刷新验证码的逻辑。

Login.vue

refreshCaptcha: function(){this.loginForm.src = this.global.baseUrl + "/captcha.jpg?t=" + new Date().getTime();}

 

原文链接 https://www.cnblogs.com/7788IT/p/10667200.html 

参考文章https://blog.csdn.net/weidong_y/article/details/81005658,https://cloud.tencent.com/developer/article/1406265

 

 

 

 

 

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

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

相关文章

使用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已经成为一种文化…

当我把ChatGPT拉进群聊里,我的朋友都玩疯了

前言 近期ChatGPT可以说是太火了&#xff0c;问答、写论文、写诗、写代码&#xff0c;只要输入精确的prompt&#xff0c;他的表现总是让人惊喜。本着打不过就加入的原则。要是把ChatGPT拉入群聊中&#xff0c;会是怎样一番场景&#xff1f;说做就做&#xff0c;花了1个晚上捣鼓…

怎么玩ChatGPT?解锁玩ChatGPT玩法

继AI绘画之后&#xff0c;ChatGPT开始成为新晋“网红。ChatGPT是一个有趣的AI程序。ChatGPT是OpenAI推出的一个语言模型系统&#xff0c;它能够实时回答用户提问&#xff0c;包括聊天、纠正语法错误&#xff0c;甚至是写代码、写剧本等&#xff0c;由于可玩性很高。正是因此&am…

刚刚,我做了详细的ChatGPT玩法攻略

ChatGPT是什么?它是一款由微软开发的对话式人工智能应用,可以与用户进行自然、流畅、有趣的对话,甚至可以生成各种类型的文本内容,如诗歌、故事、代码等。它是基于GPT-3模型开发的,拥有超过1750亿个参数,可以理解和生成多种语言。 ChatGPT为什么这么火?因为它不仅是一款…

解开ChatGPT邪恶的封印,手把手解密这个ChatGPT顶级玩法

文 / 高扬&#xff08;微信公众号&#xff1a;量子论&#xff09; 本文是《ChatGPT顶级玩法&#xff1a;ChatGPT越狱版破解&#xff0c;教你如何用最粗鲁的话狂怼网上的喷子》文章的重要补充。 文章内已说明&#xff1a; OpenAI会对 ChatGPT 建立一套保护措施&#xff0c;限制 …

ChatGPT 的 18 种玩法,惊到我了!!

点击关注公众号&#xff0c;Java干货及时送达&#x1f447; 来源&#xff1a;blog.csdn.net/weixin_42475060/article/details/129399125 语法更正文本翻译语言转换代码解释-1代码解释-2修复代码错误作为百科全书信息提取好友聊天创意生成器采访问题论文大纲故事创作问题类比创…

这 13 个 ChatGpt 的玩法,建议开发人员体验下

近年来&#xff0c;自然语言处理技术的发展使得创建强大的语言模型&#xff0c;如ChatGPT成为可能。 这些基于AI的工具能够生成类似人类文字的内容&#xff0c;使它们在包括写作和编辑在内的多种任务中非常有用。在本文中&#xff0c;我们将探索一些ChatGPT的实际应用案例&…

ChatGPT 有哪些有趣的玩法?

作者观&#xff1a; 首先要明确一点&#xff0c;ChatGPT代替不了人类&#xff0c;不要抱不切实际的期望。 作为一款由OpenAI开发的人工智能聊天软件&#xff0c;该程序在一些人的眼里具有革命性的意义。 有人说&#xff0c;这玩意儿可以在一夜之间让无数人失业&#xff0c;也…