验证码
图片验证码简单示例
1、ImageCode.java
package com.example.entity; import java.awt.image.BufferedImage; /** * Description:图片验证码类 * Package:com.example.entity * * @author lightbc * @version 1.0 */ public class ImageCode { private BufferedImage image; public ImageCode(BufferedImage image){ this.image=image; } public BufferedImage getImage() { return image; } public void setImage(BufferedImage image) { this.image = image; } }
2、ImageCodeUtil.java
package com.example.utils; import com.example.entity.ImageCode; import java.awt.*; import java.awt.image.BufferedImage; import java.util.Random; /** * Description:图片二维码处理工具类 * Package:com.example.utils * * @author lightbc * @version 1.0 */ public class ImageCodeUtil { //随机验证码取值范围 private static String CODE_RANDOM_RANGE = "0123456789QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm"; //图片验证码的宽 private static int IMAGE_CODE_WIDTH = 100; //图片验证码的高 private static int IMAGE_CODE_HEIGHT = 50; //验证码的长度 private static int IMAGE_CODE_LEN = 6; private Random random = new Random(); /** * 创建图片验证码 * @return imagecode对象 */ public ImageCode createCode(){ String sRandom; BufferedImage image = new BufferedImage(IMAGE_CODE_WIDTH,IMAGE_CODE_HEIGHT,BufferedImage.TYPE_INT_RGB); Graphics2D g2 = image.createGraphics(); //设置图片验证码背景色为白色 g2.setBackground(Color.white); g2.fillRect(0,0,IMAGE_CODE_WIDTH,IMAGE_CODE_HEIGHT); g2.setFont(new Font("宋体",Font.ITALIC,30)); for(int i=0;i<IMAGE_CODE_LEN;i++){ int randomIndex = random.nextInt(CODE_RANDOM_RANGE.length()); sRandom=String.valueOf(CODE_RANDOM_RANGE.charAt(randomIndex)); g2.setColor(createRandomColor(0,100)); g2.drawString(sRandom,15*i+5,35); } //在图片验证码中间划条横线 g2.drawLine(0,IMAGE_CODE_HEIGHT/2,IMAGE_CODE_WIDTH,IMAGE_CODE_HEIGHT/2); return new ImageCode(image); } /** * 生成随机RGB颜色 * @param bc 最小值 * @param ac 最大值 * @return color */ public Color createRandomColor(int bc,int ac){ int r = ac+random.nextInt(ac-bc); int g = ac+random.nextInt(ac-bc); int b = ac+random.nextInt(ac-bc); return new Color(r,g,b); } }
3、ImageCodeController.java
package com.example.controller; import com.example.entity.ImageCode; import com.example.utils.ImageCodeUtil; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import javax.imageio.ImageIO; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; /** * Description:图片验证码控制器 * Package:com.example.controller * * @author lightbc * @version 1.0 */ @Controller @RequestMapping("/auth/ic") public class ImageCodeController { @GetMapping(value = "/code/index") public String codeIndex(){ return "code"; } @GetMapping(value = "/get/image/code") @ResponseBody public void getImageCode(HttpServletRequest request, HttpServletResponse response) throws IOException { ImageCode imageCode = new ImageCodeUtil().createCode(); ImageIO.write(imageCode.getImage(),"JPEG",response.getOutputStream()); } }
4、效果展示
作者:lightbc
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现