单位网站建设要多少钱,花卉电子商务网站开发,网站换服务器百度不收录,网络营销优化推广公司验证码实现easy-captcha引入依赖坐标支持的验证码类型SpecCaptcha构造方法获取 / 输出方法样式配置方法验证码实现的代码示例在 Java 开发中#xff0c;最常用的验证码类型有图片验证码、短信 / 邮箱验证码、行为验证码#xff0c;在这里我们主要介绍一下图片验证码的相关内容…验证码实现easy-captcha引入依赖坐标支持的验证码类型SpecCaptcha构造方法获取 / 输出方法样式配置方法验证码实现的代码示例在 Java 开发中最常用的验证码类型有图片验证码、短信 / 邮箱验证码、行为验证码在这里我们主要介绍一下图片验证码的相关内容。easy-captcha核心定位easy-captcha 是一款专为 Java Web 场景设计的轻量级开源验证码库核心目标是简化各类验证码的开发与集成替代手写验证码的复杂底层实现。核心价值该库封装了画布创建、随机字符生成、干扰线 / 噪点绘制、IO 流输出等所有手写验证码的底层细节大幅降低开发成本开发者仅需几行代码即可快速实现验证码功能无需关注图形绘制的底层逻辑。核心特性零依赖轻量化仅依赖 JDK 内置的 AWT 绘图类库无需引入任何第三方依赖打包体积小部署无额外成本多类型全覆盖支持静态图片、动态 GIF、算术运算、中文汉字等主流验证码类型满足绝大多数业务场景需求高度可定制化支持自定义验证码长度、图片尺寸、字体样式、颜色方案、干扰元素等适配个性化视觉需求输出方式灵活支持三种输出形式 —— 本地文件、HTTP 响应流适配传统 Web 项目、Base64 编码字符串适配前后端分离项目Web 生态友好原生适配 Servlet/JSP、Spring MVC、Spring Boot 等 Java Web 技术栈提供开箱即用的工具类无需额外适配。引入依赖坐标dependencygroupIdcom.github.whvcse/groupIdartifactIdeasy-captcha/artifactIdversion1.6.2/version/dependency1.6.2 是 easy-captcha 的稳定版本适配 JDK 8如果项目使用的是 JDK 11建议使用 1.7.0 及以上版本修复了高版本 JDK 的兼容问题。支持的验证码类型静态验证码静态 PNG 格式性能最高子类型实现类核心特点适用场景轻量字符验证码CharCaptcha专注数字 / 字母 / 混合字符对性能要求高的简单场景纯数字验证码NumericCaptcha仅含 0-9 数字普通登录、简单验证纯字母验证码LetterCaptcha含大小写英文字母中等安全需求的验证数字 大写字母验证码SpecCaptcha数字 大写字母且剔除易混淆字符绝大多数通用登录 / 注册场景算术运算验证码ArithmeticCaptcha生成 0-99 加减乘算术题登录 / 注册等核心业务场景中文验证码ChineseCaptcha随机中文汉字防破解能力远高于字符类高安全需求动态验证码GIF 格式防识别最强子类型实现类核心特点适用场景字符 GIF 验证码GifCaptcha字符随机位移 / 闪烁高安全防爬虫场景中文 GIF 验证码ChineseGifCaptcha汉字随机位移 / 闪烁极高安全需求算术 GIF 验证码ArithmeticGifCaptcha算术题字符动态位移核心业务和高防爬需求下面具体介绍 SpecCaptcha 类SpecCaptchaSpecCaptcha 是开源验证码库 easy-captcha 面向通用 Web 验证场景设计的静态图片验证码实现类。该类的核心字符集限定为数字0-9与大写英文字母A-Z并通过剔除 0/O、1/I、8/B 等视觉易混淆字符降低用户识别误差。输出形态为 PNG 格式静态图片具备生成效率高、加载速度快的特性在易用性、安全防护能力与用户体验间实现平衡是 Java Web 项目中登录、注册等常规验证场景的主流选型。下面介绍该库的部分使用方法主要介绍构造方法、核心获取 / 输出方法 以及 样式配置方法。构造方法用于创建 SpecCaptcha 实例支持自定义图片尺寸、验证码长度方法签名说明SpecCaptcha()无参构造默认宽度 150、高度 50、验证码长度 4SpecCaptcha(int width, int height)指定宽高验证码长度默认 4SpecCaptcha(int width, int height, int len)自定义宽、高、验证码长度最常用获取 / 输出方法这类方法是验证码使用的核心用于获取验证码文本、生成图片、输出到流方法签名说明String text()获取生成的验证码文本BufferedImage image()生成验证码图片的 BufferedImage 对象void out(OutputStream os)将验证码图片以 PNG 格式写入输出流Web 场景中写入响应流void out(ServletOutputStream sos)重载方法适配 Servlet 响应流简化 Web 输出String toBase64()将验证码图片转换为 Base64 编码字符串适用于前后端分离场景String toBase64(boolean deletePrefix)转换为 Base64deletePrefixtrue 则移除 data:image/png;base64, 前缀样式配置方法自定义验证码外观用于调整验证码的字体、尺寸、干扰元素、背景等样式均为 set/get 成对出现void setWidth(int width) / int getWidth() 设置 / 获取验证码图片宽度void setHeight(int height) / int getHeight() 设置 / 获取验证码图片高度void setLen(int len) / int getLen() 设置 / 获取验证码字符长度void setCharType(int charType) / int getCharType() 设置 / 获取字符类型核心可选值Captcha.TYPE_DEFAULT中文Captcha.TYPE_ONLY_NUMBER纯数字Captcha.TYPE_ONLY_CHAR纯字母Captcha.TYPE_MIX数字 字母void setFont(Font font) / Font getFont() 设置 / 获取字符字体支持自定义字体、字号、加粗void setInterfereLineCount(int count) / int getInterfereLineCount() 设置 / 获取干扰线数量void setNoiseCount(int count) / int getNoiseCount() 设置 / 获取干扰像素点void setBackground(Color color) / Color getBackground() 设置 / 获取图片背景色void setCharColor(Color color) / Color getCharColor() 设置 / 获取字符颜色默认随机颜色验证码实现的代码示例前端 vue 代码示例templatedivclasscaptcha-containerel-formrefcaptchaForm:modelloginForm:rulesloginRulesel-form-itempropcaptchael-inputrefcaptchav-modelloginForm.captchaplaceholder请输入验证码prefix-iconel-icon-circle-checknamecaptchastylewidth:65%sizedefault/!-- 验证码图片支持点击刷新与展示图片 --el-imageclasscaptcha-img:srccaptchaPathclickgetCaptcha()//el-form-item/el-form/div/templatescript// 验证码API导入import{getCaptchaImg}from/api/sys/loginexportdefault{name:CaptchaDemo,data(){return{captchaPath:,loginForm:{captcha:,// 用户输入的验证码uuid:// 验证码唯一标识传给后端验证用},// 验证码输入校验规则loginRules:{captcha:[{required:true,message:请输入验证码,trigger:blur}]}}},// 页面创建时自动加载验证码created(){this.getCaptcha()},methods:{// 核心获取/刷新验证码getCaptcha(){getCaptchaImg().then(res{this.captchaPathres.data.captcha// 赋值验证码图片地址this.loginForm.uuidres.data.uuid// 保存验证码唯一标识// 开发环境自动填充验证码if(process.env.NODE_ENVdevelopment){this.loginForm.captchares.data.code}})}}}/scriptstylelangscssscoped.captcha-container{padding:30px;background:#ffffff;width:390px;border-radius:5px; .captcha-img{width:100px;height:40px;margin-left:8px;position:absolute;cursor:pointer;}}/style其中导入的验证码 API 的逻辑内容为exportfunctiongetCaptchaImg(){returnrequest({url:/captcha,method:get})}后端逻辑代码示例RestControllerpublicclassLoginController{AutowiredprivateRedisTemplateredisTemplate;/** * 获取验证码 * * return */GetMapping(/captcha)publicResultgetCaptcha(){// 借助工具包生成符合要求的验证码SpecCaptchaspecCaptchanewSpecCaptcha(130,48,4);// 获取到验证码图片的内容值并转大写StringcodespecCaptcha.text().toUpperCase();// 用uuid生成唯一的key用于存储验证码StringuuidIdUtil.simpleUUID();// 往redis里存数据redisTemplate.opsForValue().set(uuid,code,120,TimeUnit.SECONDS);// 往回组装数据HashMapString,StringresnewHashMapString,String();res.put(uuid,uuid);// 获取Base64编码res.put(captcha,specCaptcha.toBase64());res.put(code,code);returnResult.ok().put(data,res);}}Base64 编码的核心作用后端通过 easy-captcha 生成验证码图片后会得到图片的二进制数据字节流Base64 编码能将这种二进制数据转换成可打印的文本字符串避免二进制传输的乱码 / 解析问题这段代码中 specCaptcha.toBase64() 会直接生成包含 Data URI 前缀如data:image/png;base64,的 Base64 字符串前端拿到后无需手动拼接前缀直接将这个字符串赋值给img标签的 src 属性浏览器就能自动解码 Base64 字符串并渲染出验证码图片。