后台生成随机验证码验证登录

web get请求获取图片
<div class="p2"><img id="imgId" src="/get/code"><a href="#">看不清,换一张</a>
</div>
后台代码:
/*获取动态验证码*/
@ResponseBody
@RequestMapping(value = "/get/code", method = {RequestMethod.POST, RequestMethod.GET})
public void getCode(HttpServletResponse response) {creatImg(response);
}
private void creatImg(HttpServletResponse response) {int width = 120;int height = 30;// 在内存中生成图片BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);// 先获取画笔对象Graphics2D g = (Graphics2D) image.getGraphics();// 设置灰色g.setColor(Color.GRAY);// 画填充的矩形g.fillRect(0, 0, width, height);// 设置颜色g.setColor(Color.BLUE);// 画边框g.drawRect(0, 0, width - 1, height - 1);// 准备数据,随机获取4个字符String words = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890";// 设置颜色g.setColor(Color.white);// 设置字体g.setFont(new Font("隶书", Font.BOLD, 20));String code = "";//构造存储字符的数组char[] a = {};//构造存储字符串的集合List<String> list = new ArrayList<String>();Random random = new Random();int x = 20;int y = 20;for (int i = 0; i < 4; i++) {// void rotate(double theta, double x, double y)// theta 弧度// hudu = jiaodu * Math.PI / 180;// 获取正负30之间的角度int jiaodu = random.nextInt(60) - 30;double hudu = jiaodu * Math.PI / 180;g.rotate(hudu, x, y);// 获取下标int index = random.nextInt(words.length());// 返回指定下标位置的字符,随机获取下标char ch = words.charAt(index);//将字符存入字符数组中char[] chc = {ch};//使用字符数组构造字符串String string = new String(chc);//将构造好的字符串添加进list集合中list.add(string);// 写字符串g.drawString("" + ch, x, y);g.rotate(-hudu, x, y);x += 20;}for (int i = 0; i < list.size(); i++) {code += list.get(i);}//将验证码存入上下文中servletContext.setAttribute("code", code);// 设置颜色g.setColor(Color.GREEN);int x1, x2, y1, y2;// 画干扰线for (int i = 0; i < 4; i++) {x1 = random.nextInt(width);y1 = random.nextInt(height);x2 = random.nextInt(width);y2 = random.nextInt(height);g.drawLine(x1, y1, x2, y2);}// 输出到客户端try {ImageIO.write(image, "jpg", response.getOutputStream());} catch (IOException e) {e.printStackTrace();}}
登录验证:
@RequestMapping(value = "/user/login", method = {RequestMethod.POST, RequestMethod.GET})public void Login(@RequestBody UserBean userBean, HttpSession session, HttpServletResponse response) throws Exception {String code = userBean.getCode();//从上下文获取存储的验证码String code1 = (String) servletContext.getAttribute("code");//账号密码为admin.且验证码(忽略大小写)输入正确,则跳转到登陆成功页面if ("".equals(code) || code == null || !code.equalsIgnoreCase(code1)) {HttpServletResponseUtil.back(response, 202, "验证码错误!", null);return;}QueryWrapper<UserBean> queryWrapper = new QueryWrapper<>();queryWrapper.eq("username", userBean.getUsername());queryWrapper.eq("password", userBean.getPassword());List<UserBean> beans = mapper.selectList(queryWrapper);if (beans != null && beans.size() > 0) {log.info("登陆成功,用户名:" + userBean.getUsername());log.info("登陆成功,密码:" + userBean.getPassword());session.setAttribute("loginUser", userBean);HttpServletResponseUtil.back(response, 200, "登录成功!", null);} else {HttpServletResponseUtil.back(response, -1, "账号密码错误", null);}}
相关文章:
后台生成随机验证码验证登录
web get请求获取图片 <div class"p2"><img id"imgId" src"/get/code"><a href"#">看不清,换一张</a> </div> 后台代码: /*获取动态验证码*/ ResponseBody RequestMapping(value "/…...
常见的HTTP接口超时问题出现原因及解决办法
HTTP接口超时问题是指在HTTP请求发送到服务器后,由于等待服务器响应的时间超过了预设的超时时间,导致请求被中断。以下是可能导致HTTP接口超时问题的原因和解决方法: 网络延迟或不稳定:网络延迟或不稳定可能导致请求在传输过程中…...
Pandas实战100例 | 案例 54: 日期时间运算
案例 54: 日期时间运算 知识点讲解 当处理带有 datetime 类型数据的 DataFrame 时,Pandas 提供了多种方法来提取和计算日期时间组件。这包括提取年份、月份、日期、星期几以及小时等。 提取日期时间组件: 使用 .dt 访问器,可以从 datetime 类型的列中…...
SDL2 连续帧图像显示
QT使用SDL多窗口显示视频(linux,ubuntu)_linux qt sdl-CSDN博客 QT使用SDL播放YUV视频 - C - QT C 使用SDL显示RGB图像数据_c sdl-CSDN博客 SDL库入门:掌握跨平台游戏开发和多媒体编程_sdl开发-CSDN博客 SDL教程零基础入门 简单…...
回归预测 | MATLAB实现SSA-CNN-GRU-Attention多变量回归预测(SE注意力机制)
回归预测 | MATLAB实现SSA-CNN-GRU-Attention多变量回归预测(SE注意力机制) 目录 回归预测 | MATLAB实现SSA-CNN-GRU-Attention多变量回归预测(SE注意力机制)预测效果基本描述程序设计参考资料 预测效果 基本描述 1.Matlab实现SSA…...
使用composer构建软件包时文件(夹)权限设置
在构建软件包的时候你可能会需要对包源内文件或文件夹的权限做出相应的调整,以确保软件包在部署到客户端后可以正常运行。在此之前我们先来了解一下Apple文件系统内文件或文件夹的权限设定。 常见的文件或文件夹会有Owner, Group, Everyone这三种类型的所有权&#…...
【C#】面向对象的三大特性,还记得吗,简单代码举例回顾
欢迎来到《小5讲堂》 大家好,我是全栈小5。 这是《C#》序列文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点的理解和掌握。…...
235.【2023年华为OD机试真题(C卷)】机器人搬砖(二分查找-JavaPythonC++JS实现)
🚀点击这里可直接跳转到本专栏,可查阅顶置最新的华为OD机试宝典~ 本专栏所有题目均包含优质解题思路,高质量解题代码(Java&Python&C++&JS分别实现),详细代码讲解,助你深入学习,深度掌握! 文章目录 一. 题目二.解题思路三.题解代码Python题解代码JAVA题解…...
git hooks
介绍 当我们在执行git管理仓库代码时,想规范下每个用户的commit内容?想检查下提交的代码规范?想检查下PR是否通过,那么这个时候就需要用到git hooks,git hooks可以在我们进行git操作的关键时机插入我们想要执行的“脚…...
法规更新美国玩具标准ASTM F963-17有更新,最新标准为ASTM F963-23
美国材料试验协会 (ASTM)在10月13日发布了新的玩具安全标准:ASTM F963-23,ASTM F963-17美国联邦法规16 CFR 1250还在使用当中,出口美国的玩具的厂商要引起重视。 ASTM F963-17是什么标准? ASTM F963-17是美国玩具检测标准&#…...
【grpc】利用protobuf实现java或kotlin调用python脚本,含实现过程和全部代码
前言 在一些特殊场景中,我们可能需要使用java或者其他任意语言调用python脚本或sdk等。本文的需求衍生也不例外于此,python端有sdk,但只能在python中调用,于是就有了本文章。 常见的调用方式如jython、python提供http rest接口、…...
Linux网络 ----- 网络文件共享服务之FTP服务
引言 FTP服务是Internet上最早应用于主机之间进行数据传输的基本服务之一。是目前Internet上使用最广泛的文件传送协议 一、FTP概述 FTP(File TransferProtocol,文件传输协议)是典型的C/S架构的应用层协议,需要由服务端软件、客户端软件两个部分共同实…...
如何避免知识付费小程序平台的陷阱?搭建平台的最佳实践
随着知识经济的兴起,知识付费已经成为一种趋势。越来越多的人开始将自己的知识和技能进行变现,而知识付费小程序平台则成为了一个重要的渠道。然而,市面上的知识付费小程序平台琳琅满目,其中不乏一些不良平台,让老实人…...
第89讲:MySQL数据库迁移方面需要考虑的因素以及XBK企业级备份参数
文章目录 MySQL数据库迁移方面需要考虑的因素1.MySQL数据库迁移方面要考虑的因素2.MySQL5.6升级到5.7版本的方法3.MySQL迁移到其他数据库的方法4.为什么要从XBK备份中还原某张表的数据5.从XBK备份中还原某张表的数据6.XtrBackup企业级备份参数 MySQL数据库迁移方面需要考虑的因…...
Python爬虫经典实战项目——电商数据爬取!
电商数据采集爬虫背景 在如今这个网购风云从不间歇的时代,购物狂欢持续不断,一年一度的“6.18年中大促”、“11.11购物节”等等成为了网购电商平台的盛宴。在买买买的同时,“如何省钱?”成为了大家最关心的问题。 比价、返利、优…...
Qt 快捷键设置
以 “在编辑时自动补齐”快捷键 为例: 位置:红色 搜索快捷键:蓝色 修改方式:绿色 快捷键:黄色...
【C++】取整函数ceil(),floor(),round()
使用 //引入头文件 #include <cmath> //函数使用 double around(double x) double afloor(double x) double aceil(double x) 结果取值 floor(x) 返回是小于或等于x的最大整数,如floor(-9.9)-10,floor(9.9)9;若为整数,最后的结果等于本…...
GoLang刷题之leetcode
题目42:接雨水 题目描述: 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水 题解: 对于每一个横坐标能接到的雨水量max(左侧最大纵坐标,右侧最大…...
uniapp如何分包加载
在uni-app中,可以通过配置manifest.json文件来实现分包加载。以下是具体操作步骤: 在项目根目录下找到并打开manifest.json文件。在"uni-app"节点中,找到并修改"subPackages"节点,添加需要分包的页面路径。 …...
019、错误处理:不可恢复错误与panic!
鉴于上一篇文章过长,不方便大家阅读和理解,因此关于Rust中的错误处理, 我将分以下3篇来讲。 另外,随着我们学习的不断深入,难度也会越来越大,但不用担心。接下来只需要让自己的脚步慢一些,认真搞…...
IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...
return this;返回的是谁
一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...
uniapp 开发ios, xcode 提交app store connect 和 testflight内测
uniapp 中配置 配置manifest 文档:manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号:4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...
C语言中提供的第三方库之哈希表实现
一. 简介 前面一篇文章简单学习了C语言中第三方库(uthash库)提供对哈希表的操作,文章如下: C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...
毫米波雷达基础理论(3D+4D)
3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文: 一文入门汽车毫米波雷达基本原理 :https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...
数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !
我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...
从零开始了解数据采集(二十八)——制造业数字孪生
近年来,我国的工业领域正经历一场前所未有的数字化变革,从“双碳目标”到工业互联网平台的推广,国家政策和市场需求共同推动了制造业的升级。在这场变革中,数字孪生技术成为备受关注的关键工具,它不仅让企业“看见”设…...
