Kaptcha验证码组件
第一步:引入对应的组件信息 pom.xml中添加 <!-- Kaptcha验证码组件 --> <dependency> <groupId>com.github.penggle</groupId> <artifactId>kaptcha</artifactId> <version>2.3.2</version> </dependency> 第二步:在applicationContext.xml中添加设置信息 <!-- 配置Kaptcha --> <bean id="kaptchaProducer" class="com.google.code.kaptcha.impl.DefaultKaptcha"> <property name="config"> <bean class="com.google.code.kaptcha.util.Config"> <constructor-arg> <props> <!--验证码图片不生成边框--> <prop key="kaptcha.border">no</prop> <!-- 验证码图片宽度为120像素 --> <prop key="kaptcha.image.width">120</prop> <!-- 验证码图片字体颜色为蓝色 --> <prop key="kaptcha.textproducer.font.color">blue</prop> <!-- 每个字符最大占用40像素 --> <prop key="kaptcha.textproducer.font.size">40</prop> <!-- 验证码包含4个字符 --> <prop key="kaptcha.textproducer.char.length">4</prop> </props> </constructor-arg> </bean> </property> </bean> 第三步:添加工具类KaptchaController.java import java.awt.image.BufferedImage; import java.io.IOException; import javax.annotation.Resource; import javax.imageio.ImageIO; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import com.google.code.kaptcha.Producer; @Controller public class KaptchaController { @Resource private Producer kaptchaProducer; @GetMapping("/verify_code") public void createVerifyCode(HttpServletRequest request , HttpServletResponse response) throws IOException { //响应立即过期 response.setDateHeader("Expires",0); //不缓存任何图片数据 response.setHeader("Cache-Control" , "no-store,no-cache,must-revalidate"); response.setHeader("Cache-Control" , "post-check=0,pre-check=0"); response.setHeader("Pragma" , "no-cache"); response.setContentType("image/png"); //生成验证码字符文本 String verifyCode = kaptchaProducer.createText(); request.getSession().setAttribute("kaptchaVerifyCode",verifyCode); System.out.println(request.getSession().getAttribute("kaptchaVerifyCode")); BufferedImage image = kaptchaProducer.createImage(verifyCode);//创建验证码图片 ServletOutputStream out = response.getOutputStream(); ImageIO.write(image, "png", out);//输出图片流 out.flush(); out.close(); } } 第四步:在前台需要的jsp页面的img标签中,调用对应路径即可 <img id="imgVerifyCode" src="/verify_code" style="width: 120px;height:50px;cursor: pointer"> 添加对应的点击刷新功能 //重新发送请求,刷新验证码 function reloadVerifyCode(){ //请在这里实现刷新验证码 $("#imgVerifyCode").attr("src","/verify_code?ts=" + new Date().getTime()); } //点击验证码图片刷新验证码 $("#imgVerifyCode").click(function () { reloadVerifyCode(); });
后台验证时: 前台ajax提交,后台从HttpServletRequest request中获取: String verifyCode = (String)request.getSession().getAttribute("kaptchaVerifyCode"); 此处kaptchaVerifyCode 为验证码生成工具中的request 所添加的 request.getSession().setAttribute("kaptchaVerifyCode",verifyCode); @PostMapping("/registe") @ResponseBody //vc:前台输入验证码 username:用户名 password:密码 nickname:昵称 public Map registe(String vc, String username, String password , String nickname , HttpServletRequest request){ //正确验证码 String verifyCode = (String)request.getSession().getAttribute("kaptchaVerifyCode"); //验证码对比 Map result = new HashMap();
//equalsIgnoreCase() 方法用于将字符串与指定的对象比较,不考虑大小写。 if(vc == null || verifyCode == null || !vc.equalsIgnoreCase(verifyCode)){ result.put("code", "VC01"); result.put("msg", "验证码错误"); }else{ try { memberService.createMember(username, password, nickname); result.put("code", "0"); result.put("msg", "success"); }catch (BussinessException ex){ ex.printStackTrace(); result.put("code", ex.getCode()); result.put("msg", ex.getMsg()); } } return result; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律