Java 图形验证码
简介
Java 图形验证码,支持 Gif、中文、算术等类型,可用于 Java Web、JavaSE 等项目。
效果展
集成项目
- maven 方式引入:
<dependency> <groupId>com.github.whvcse</groupId> <artifactId>easy-captcha</artifactId> <version>1.6.2</version> </dependency>
- 在 SpringBoot 中使用
package com.hikvision.websocketparent.controller; import com.wf.captcha.utils.CaptchaUtil; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; /** * @author dongliang7 * @projectName * @ClassName CaptchaController.java * @description: 图形验证码控制层 * @createTime 2022年12月28日 12:30:00 */ @RestController @RequestMapping("/captcha") public class CaptchaController { /** * 获取验证码 * @param request * @param response * @throws IOException */ @GetMapping("/getCaptcha") public void captcha(HttpServletRequest request, HttpServletResponse response) throws IOException { CaptchaUtil.out(request, response); } /** * 验证码校验 * @param verCode * @param request * @return */ @GetMapping("/verification") public String verification(@RequestParam String verCode, HttpServletRequest request){ if (!CaptchaUtil.ver(verCode, request)) { CaptchaUtil.clear(request); // 清除session中的验证码 return "验证码不正确"; } return "验证码验证成功"; } }
- 图片验证码公用类如果想改造,可以自行实现CaptchaUtil
package com.wf.captcha.utils; import java.awt.*; import java.io.IOException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.wf.captcha.base.Captcha; import com.wf.captcha.SpecCaptcha; /** * 图形验证码工具类 * Created by 王帆 on 2018-07-27 上午 10:08. */ public class CaptchaUtil { private static final String SESSION_KEY = "captcha"; private static final int DEFAULT_LEN = 4; // 默认长度 private static final int DEFAULT_WIDTH = 130; // 默认宽度 private static final int DEFAULT_HEIGHT = 48; // 默认高度 /** * 输出验证码 * * @param request HttpServletRequest * @param response HttpServletResponse * @throws IOException IO异常 */ public static void out(HttpServletRequest request, HttpServletResponse response) throws IOException { out(DEFAULT_LEN, request, response); } /** * 输出验证码 * * @param len 长度 * @param request HttpServletRequest * @param response HttpServletResponse * @throws IOException IO异常 */ public static void out(int len, HttpServletRequest request, HttpServletResponse response) throws IOException { out(DEFAULT_WIDTH, DEFAULT_HEIGHT, len, request, response); } /** * 输出验证码 * * @param width 宽度 * @param height 高度 * @param len 长度 * @param request HttpServletRequest * @param response HttpServletResponse * @throws IOException IO异常 */ public static void out(int width, int height, int len, HttpServletRequest request, HttpServletResponse response) throws IOException { out(width, height, len, null, request, response); } /** * 输出验证码 * * @param font 字体 * @param request HttpServletRequest * @param response HttpServletResponse * @throws IOException IO异常 */ public static void out(Font font, HttpServletRequest request, HttpServletResponse response) throws IOException { out(DEFAULT_WIDTH, DEFAULT_HEIGHT, DEFAULT_LEN, font, request, response); } /** * 输出验证码 * * @param len 长度 * @param font 字体 * @param request HttpServletRequest * @param response HttpServletResponse * @throws IOException IO异常 */ public static void out(int len, Font font, HttpServletRequest request, HttpServletResponse response) throws IOException { out(DEFAULT_WIDTH, DEFAULT_HEIGHT, len, font, request, response); } /** * 输出验证码 * * @param width 宽度 * @param height 高度 * @param len 长度 * @param font 字体 * @param request HttpServletRequest * @param response HttpServletResponse * @throws IOException IO异常 */ public static void out(int width, int height, int len, Font font, HttpServletRequest request, HttpServletResponse response) throws IOException { SpecCaptcha specCaptcha = new SpecCaptcha(width, height, len); if (font != null) { specCaptcha.setFont(font); } out(specCaptcha, request, response); } /** * 输出验证码 * * @param captcha Captcha * @param request HttpServletRequest * @param response HttpServletResponse * @throws IOException IO异常 */ public static void out(Captcha captcha, HttpServletRequest request, HttpServletResponse response) throws IOException { setHeader(response); request.getSession().setAttribute(SESSION_KEY, captcha.text().toLowerCase()); captcha.out(response.getOutputStream()); } /** * 验证验证码 * * @param code 用户输入的验证码 * @param request HttpServletRequest * @return 是否正确 */ public static boolean ver(String code, HttpServletRequest request) { if (code != null) { String captcha = (String) request.getSession().getAttribute(SESSION_KEY); return code.trim().toLowerCase().equals(captcha); } return false; } /** * 清除session中的验证码 * * @param request HttpServletRequest */ public static void clear(HttpServletRequest request) { request.getSession().removeAttribute(SESSION_KEY); } /** * 设置相应头 * * @param response HttpServletResponse */ public static void setHeader(HttpServletResponse response) { response.setContentType("image/gif"); response.setHeader("Pragma", "No-cache"); response.setHeader("Cache-Control", "no-cache"); response.setDateHeader("Expires", 0); } }
源码:https://gitee.com/whvse/EasyCaptcha