Hutool 验证码案例

Hutool 验证码案例

目录

  • Hutool 验证码案例
    • 项目结构
    • 所学jar包
    • 生成验证码业务逻辑
    • 登录业务逻辑
    • 登录页面login.html

项目结构

在这里插入图片描述

所学jar包

hutool、fastjson

生成验证码业务逻辑

package com.bjpowernode.code;import cn.hutool.captcha.CaptchaUtil;
import cn.hutool.captcha.LineCaptcha;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@WebServlet("/imagecode")
public class ImageCodeServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//创建验证码对象LineCaptcha lineCaptcha = CaptchaUtil.createLineCaptcha(100, 50, 4, 10);//获取验证码字符串String code = lineCaptcha.getCode();//将验证码 放入到session中req.getSession().setAttribute("code",code);//将验证码输出lineCaptcha.write(resp.getOutputStream());}
}

登录业务逻辑

package com.bjpowernode.login;import com.alibaba.fastjson.JSON;
import com.bjpowernode.result.JSONResult;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;@WebServlet("/login")
public class LoginServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//设置post请求乱码req.setCharacterEncoding("utf-8");//设置响应的数据格式resp.setContentType("application/json;charset=utf-8");JSONResult jsonResult = new JSONResult();PrintWriter writer = resp.getWriter();String username = req.getParameter("username");String pwd = req.getParameter("pwd");String code = req.getParameter("code");if(code==null||code.equals("")){jsonResult.mark("验证码不能为空");writer.write(JSON.toJSONString(jsonResult));return;}// 获取服务器端保存的验证码String sessionCode = (String) req.getSession().getAttribute("code");if(sessionCode==null||sessionCode.equals("")){jsonResult.mark("验证码错误");writer.write(JSON.toJSONString(jsonResult));return;}if(!sessionCode.equalsIgnoreCase(code)){jsonResult.mark("验证码错误");writer.write(JSON.toJSONString(jsonResult));return;}if(username==null||username.equals("")){jsonResult.mark("账号不能为空");writer.write(JSON.toJSONString(jsonResult));return;}if(pwd ==null||pwd .equals("")){jsonResult.mark("密码不能为空");writer.write(JSON.toJSONString(jsonResult));return;}if(!username.equals("admin")&&pwd.equals("123")){jsonResult.mark("登录失败");writer.write(JSON.toJSONString(jsonResult));return;}writer.write(JSON.toJSONString(jsonResult));}
}

成功失败返回结果类

package com.bjpowernode.result;public class JSONResult {private boolean success = true;private String errorMsg;public JSONResult mark(String msg){this.errorMsg = msg;this.success = false;return this;}public boolean isSuccess() {return success;}public String getErrorMsg() {return errorMsg;}
}

登录页面login.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script src="js/jquery-3.6.1.js"></script>
</head>
<body>
<form id="formId" action="/login" method="post">姓名:<input type="text" name="username"/><br/>密码:<input type="password" name="pwd"/><br/>验证码:<input type="text" name="code"/><img src="/imagecode" width="100px" onclick="changeCode(this)"><br><span style="color: red" id="tip"></span><input id="btnId" type="button" value="登录"></form>
</body>
<script>// $(function () {//     console.log(1);//     var serialize = $("#formId").serialize();//     console.log(serialize);//     console.log("----------------------")//     var serializeArray = $("#formId").serializeArray();//     console.log(serializeArray);//// })window.onload = function () {$("#btnId").click(function () {$.post("/login",$("#formId").serialize(),function(data){console.log($("#formId").serialize());if(data.success){alert("登录成功");}else{$("#tip").text(data.errorMsg)}})})}function changeCode(self) {// 原生JS// self.src = "/imagecode?time="+new Date();// self.setAttribute("src","/imagecode?time="+new Date());// AJAX// $(self).prop("src","/imagecode?time="+new Date());$(self).attr("src","/imagecode?time="+new Date());}
</script>
</html>

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

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

相关文章

chatgpt赋能python:10年经验工程师教您如何免费使用Pycharm

10年经验工程师教您如何免费使用Pycharm 什么是Pycharm&#xff1f; Pycharm是一款由JetBrains公司开发的Python集成开发环境&#xff08;IDE&#xff09;&#xff0c;它是针对Python编程语言的开发环境&#xff0c;可以提供代码编译、调试、自动完成、版本控制等一系列强大的…

使用 AccountManager 实现系统内共享账号

前言 在开发过程中我们可能遇到自家应用间共享账号的场景。例如 APP1 登录成功后&#xff0c;启动 APP2 时自动完成登录并与 APP1 共享账号信息。 Android 为我们提供了AccountManager 来管理账号信息。 demo 地址 共享前提 两个 app 在一个用户组内使用相同的签名&#x…

切换用户账户访问共享文件夹

问题描述 如题&#xff0c;局域网内访问一台机器的共享文件时&#xff0c;第一次会弹提示框输入用户名和密码&#xff0c;再次访问这台机器的时候共享直接就打开了&#xff1b;如果想用另外一个帐号重新访问这个共享文件夹的话&#xff0c;该怎么办。 解决方案 凭据管理器&…

如何在打开共享时,能够切换用户登录?

问题&#xff1a; 今天在设置共享的时候遇到一个问题&#xff0c;一台windows的机器开了共享&#xff0c;在登录的时候会提示输入用户名和密码&#xff0c;我在输入密码的时候&#xff0c;顺便选择了记住密码【默认在不选择密码的时候&#xff0c;在下次登录时也是直接进去的】…

基于 CNN的年龄和性别检测

自2012年深度学习火起来后&#xff0c;AlexNet&#xff0c;vgg16&#xff0c;vgg19&#xff0c;gooGleNet&#xff0c;caffeNet&#xff0c;faster RCNN等&#xff0c;各种模型层出不群&#xff0c;颇有文艺复兴时的形态。 在各种顶会论文中&#xff0c;对年龄和性别的检测的论…

养育男孩 Boy

ISBN: 978-7-5472-5949-8 作者&#xff1a;闫晗 页数&#xff1a;245页 阅读时间&#xff1a;2021-07-31 推荐指数&#xff1a;★★★★☆ 在所有的动物中&#xff0c;男孩是最难控制和对付的。 男孩更擅长处理那些简单直接的情感&#xff0c;远不如小女孩细腻。 教会孩子通过…

【Python爬虫】利用爬虫抓取双色球开奖号码,获取完整数据,简洁45行代码实现,更新时间2023-06-28

链接&#xff1a;https://pan.baidu.com/s/18oE308_NVNPaCOACw_H5Hw?pwdabc1 利用爬虫抓取双色球开奖号码&#xff0c;获取完整数据&#xff0c;简洁45行代码实现&#xff0c;更新时间2023-06-28 这是网上的数据&#xff0c;怎么将它爬取下来 它将只爬取最近30期的双色球开…

微软154页论文刷屏:GPT-4能力接近人类!初版AGI就快来了...

点击下方卡片&#xff0c;关注“CVer”公众号 AI/CV重磅干货&#xff0c;第一时间送达 点击进入—>【计算机视觉】微信技术交流群 转载自&#xff1a;机器之心 GPT-4 的能力什么档次&#xff1f; 1956 年&#xff0c;在达特茅斯学院召开的一个研讨会上&#xff0c;人工智能这…

TCP传输文件

传输文件和传输信息的区别&#xff1a; 传输信息&#xff0c;只是一条数据&#xff0c;传输文件是多条数据传输信息传输过去一般都会显示&#xff0c;传输文件一般不会显示&#xff0c;一般只是存放在文件中传输文件需要传输&#xff0c;文件大小和文件名称&#xff08;不然不知…

【计算机网路】一个简单的chat程序,并能互传文件(Python)

前言 这个实验已经做了一个多月了&#xff0c;本来打算把程序功能完善一下再分享出来&#xff0c;无奈最近太忙了&#xff0c;又怕改来改去又改崩了就迟迟未改。最近终于把想学了好久的Git学了&#xff0c;就把这个代码传到了Github上。后续如果不出意外的话会继续完善&#x…

数字 IC 设计、FPGA 设计秋招笔试题目、答案、解析(4)2022 乐鑫数字芯片提前批笔试

单选题 1、以下关于 System Verilog 的描述&#xff0c;正确的是&#xff08; &#xff09; A. sv 中可以用 logic 代替 Verilog 中的 wire 和 reg 类型 B. sv 中&#xff0c; 定义成 reg 的信号会被综合成触发器 C. sv 中的 function 语言不可被综合 D. 其他都不正确 …

数字 IC 设计职位经典笔/面试题(二)

共100道经典笔试、面试题目&#xff08;文末可全领&#xff09; FPGA 中可以综合实现为 RAM/ROM/CAM 的三种资源及其注意事项&#xff1f; 三种资源&#xff1a;BLOCK RAM&#xff0c;触发器&#xff08;FF&#xff09;&#xff0c;查找表&#xff08;LUT&#xff09;&#xf…

数字IC设计工程师笔试面试经典100题-有答案

转自知乎答主ictown_数字IC设计工程师笔试面试经典100题-有答案-陈恩 1&#xff1a;什么是同步逻辑和异步逻辑&#xff1f;&#xff08;汉王&#xff09; 同步逻辑是时钟之间有固定的因果关系。异步逻辑是各时钟之间没有固定的因果关系。 同步时序逻辑电路的特点&#xff1a;各…

汇顶2018年 IC校招笔试题目

前言 后面,打算整理下数字ic笔试面试题目,希望以此为出发点,补充知识点!声明:个人觉得,学习期间,基本上都是知识的搬运,所以本博客所有内容都可以被大家引用!为了大家方便引用,博客内的图片都没有加博客的水印(除非不是自己的或者没看到)!这篇文章会基于下面这些文…

请收下这份数字IC面试超强攻略!(内附大厂面试题目)

2022年马上就要结束了&#xff0c;想必今年有很多同学也已经感受到IC行业的门槛在不断提升&#xff0c;这一点尤其在面试的过程中感受明显。 前两年的时候&#xff0c;面试官有可能问一些比较简单的问题就能通过&#xff0c;今年可就没那么简单了&#xff0c;必须提前做好相关…

数字IC笔试题3

目录 1.一个八位D/A转换器最小电压增量为0.01V&#xff0c;当输10011100时&#xff0c;输出电压为&#xff08;D&#xff09;V 2.下述概念中不属于面向对象这种编程范畴的是&#xff08;D&#xff09; 3.组合逻辑电路通常由&#xff08;B&#xff09;组合而成 4.三极管作为…

数字IC笔试题4

目录 1.[单选题]下列电路中属于时序逻辑电路的是&#xff08;B&#xff09; 2.[单选题]关于同步设计描述错误的是&#xff08;D&#xff09; 3.[多选题]下面哪种措施不能减少亚稳态影响&#xff08;CD&#xff09; 4.[单选题]状态机没有冗余状态时&#xff0c;可以不写defa…

海康威视 2024届 数字逻辑设计 实习笔试分析

说明 记录一下 5月11日晚&#xff0c;做的海康威视的一场笔试。分享给需要的IC人。 岗位&#xff1a;数字逻辑设计工程师&#xff08;浙江 杭州&#xff09; 转载需要本人同意&#xff01; 我的见解不一定都是准确的&#xff0c;欢迎评论区交流指正~~ 单选题 1、&#xff…

数字IC设计/FPGA工程师秋招面经

秋招面经 秋招总结迷茫期低谷期兴奋期秋招面试常问问题投递公司学习的FPGA课程总结 秋招总结 已经一个多月没更新博客了&#xff0c;并不是因为博主的只是储备量空了&#xff0c;而是因为我去准备秋招去了&#xff0c;接下来将会恢复博客的更新&#xff0c;速度不会太快&#…