Servlet-SrpingMVC 生成验证码
2023-04-18 12:33:38 时间
在SpringMVC中配置生成验证码:
1 import org.springframework.stereotype.Controller; 2 import org.springframework.web.bind.annotation.RequestMapping; 3 4 5 import java.awt.Color; 6 import java.awt.Graphics; 7 import java.awt.image.BufferedImage; 8 import java.io.IOException; 9 import java.io.PrintWriter; 10 import java.util.Random; 11 12 import javax.imageio.ImageIO; 13 import javax.servlet.ServletException; 14 import javax.servlet.http.HttpServletRequest; 15 import javax.servlet.http.HttpServletResponse; 16 17 @Controller 18 public class RegisterController { 19 20 21 // 图片高度 22 private static final int IMG_HEIGHT = 100; 23 // 图片宽度 24 private static final int IMG_WIDTH = 30; 25 // 验证码长度 26 private static final int CODE_LEN = 4; 27 28 @RequestMapping(value = "/getCode.action") 29 public void getCode(HttpServletRequest req, HttpServletResponse resp) 30 throws ServletException, IOException { 31 // 用于绘制图片,设置图片的长宽和图片类型(RGB) 32 BufferedImage bi = new BufferedImage(IMG_HEIGHT, IMG_WIDTH, BufferedImage.TYPE_INT_RGB); 33 // 获取绘图工具 34 Graphics graphics = bi.getGraphics(); 35 graphics.setColor(new Color(100, 230, 200)); // 使用RGB设置背景颜色 36 graphics.fillRect(0, 0, 100, 30); // 填充矩形区域 37 38 // 验证码中所使用到的字符 39 char[] codeChar = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456".toCharArray(); 40 String captcha = ""; // 存放生成的验证码 41 Random random = new Random(); 42 for(int i = 0; i < CODE_LEN; i++) { // 循环将每个验证码字符绘制到图片上 43 int index = random.nextInt(codeChar.length); 44 // 随机生成验证码颜色 45 graphics.setColor(new Color(random.nextInt(150), random.nextInt(200), random.nextInt(255))); 46 // 将一个字符绘制到图片上,并制定位置(设置x,y坐标) 47 graphics.drawString(codeChar[index] + "", (i * 20) + 15, 20); 48 captcha += codeChar[index]; 49 } 50 // 将生成的验证码code放入sessoin中 51 req.getSession().setAttribute("code", captcha); 52 53 //设置响应头部 54 response.setContentType("image/jpeg"); 55 56 // 通过ImageIO将图片输出 57 ImageIO.write(bi, "JPG", resp.getOutputStream()); 58 59 } 60 61 }
相关文章
- 教大模型自己跳过“无用”层,推理速度×3性能不变,谷歌MIT这个新方法火了
- 2022年程序员最新薪资调查出炉
- 从业务开发中学习和理解架构设计
- 三板斧!助你成为优秀软件工程师
- 坚持了16年,这次百度秀了什么?
- 人人都能用的多语种大语言模型来了!支持59种语言,参数1760亿
- Google开源Carbon语言,旨在成为C++的继任者
- 论文党有福了!微软Edge浏览器增加“引文”功能:一键生成文献引用格式
- 微软 Office 14630.20000 预览版发布:PowerPoint 顶部又加一栏,推出辅助功能区
- 微软 Edge Dev 浏览器 97 发布:改进 PDF 和密码管理
- Windows 11上清除TPM之后还能使用吗?实测来了:影响不大
- 新系统仍不够完美!盘点Windows 11的不尽人意之处
- 通过这11个技巧,打造个性化十足的Windows 11,界面更好看
- Windows 10系统繁体字输入法怎么设置?Windows 10输入法设置方法
- 系统已过期 微软明年起停止Windows7/8/8.1的OneDrive个人版服务
- Linux 系统僵尸进程详解
- 你要的Windows:精简+ CPU占用率暴降!瞬间干掉LTSC
- 如何判断你的PC是否可以运行Windows 11?
- Windows 10系统,安装失败进不了系统怎么办?Windows 10安装失败解决方法
- Windows11 第三方 Files v2 标签式文件管理器更新:可设置为默认文件资源管理器