五分钟搞定验证码,你学会了吗?

哈喽,大家好,我是了不起。

我们其实很经常看到,登录一些网站其实是需要验证码的。使用验证码是现在很多网站通行的一种方式,因为计算机很难识别验证码,所以可以识别验证码的用户就可以被认为是人类。

今天我们讲一下在 Java 中验证码的使用。

验证码生成

本效果是利用easy-captcha工具包实现,首先需要添加相关依赖到pom.xml中,代码如下:

    com.github.whvcse    easy-captcha    1.6.2
验证码格式

easy-captcha验证码工具支持GIF、中文、算术等类型,分别通过下面几个实例对象实现:

SpecCaptcha(PNG类型的静态图片验证码)GifCaptcha(Gif类型的图片验证码)ChineseCaptcha(GIF类型中文图片验证码)ArithmeticCaptcha(算术类型的图片验证码)

字符类型分为以下几种:

TYPE_DEFAULT:数字和字母混合TYPEONLYNUMBER:纯数字TYPEONLYCHAR:纯字母TYPEONLYUPPER:纯大写字母TYPEONLYLOWER:纯小写字母TYPENUMAND_UPPER:数字和大写字母混合后端逻辑的实现
package com.yanx.controller; import com.wf.captcha.SpecCaptcha;import com.wf.captcha.base.Captcha;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.ResponseBody;import org.thymeleaf.util.StringUtils; import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException; @Controllerpublic class KapchaController {    @GetMapping("/kaptcha")    public void defaultKaptcha(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws IOException {        httpServletResponse.setHeader("Cache-Control","no-store");        httpServletResponse.setHeader("Pragma","no-cache");        httpServletResponse.setDateHeader("Expires",0);        httpServletResponse.setContentType("image/gif");         //三个参数分别为宽、高、位数        SpecCaptcha captcha=new SpecCaptcha(75,30,4);         //设置类型为数字和字母混合        captcha.setCharType(Captcha.TYPE_DEFAULT);         //设置字体        captcha.setCharType(Captcha.FONT_9);         //验证码存入session        httpServletRequest.getSession().setAttribute("verifyCode",captcha.text().toLowerCase());         //输出图片流        captcha.out(httpServletResponse.getOutputStream());    } }

这里控制器新增了defaultKaptcha()方法,该方法所拦截处理的路径为/kaptcha

前端逻辑的实现

在static目录中新建kaptcha.html页面,代码如下:

        验证码 

访问后端验证码路径/kaptcha,验证码为图片形式。onclick方法为点击该标签时可以动态切换显示验证码。

启动Spring Boot项目,打开浏览器输入地址:

​​http://localhost:8080/kaptcha.html​​

效果如下:

验证码验证后端代码
package com.yanx.controller; import com.wf.captcha.SpecCaptcha;import com.wf.captcha.base.Captcha;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.ResponseBody;import org.thymeleaf.util.StringUtils; import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import java.io.IOException; @Controllerpublic class KapchaController {    @GetMapping("/kaptcha")    public void defaultKaptcha(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws IOException {        httpServletResponse.setHeader("Cache-Control","no-store");        httpServletResponse.setHeader("Pragma","no-cache");        httpServletResponse.setDateHeader("Expires",0);        httpServletResponse.setContentType("image/gif");         //三个参数分别为宽、高、位数        SpecCaptcha captcha=new SpecCaptcha(75,30,4);         //设置类型为数字和字母混合        captcha.setCharType(Captcha.TYPE_DEFAULT);         //设置字体        captcha.setCharType(Captcha.FONT_9);         //验证码存入session        httpServletRequest.getSession().setAttribute("verifyCode",captcha.text().toLowerCase());         //输出图片流        captcha.out(httpServletResponse.getOutputStream());    }     @GetMapping("/verify")    @ResponseBody    public String verify(@RequestParam("code") String code, HttpSession session){        if(StringUtils.isEmpty(code)){            return "验证码不能为空";        }        String kapchaCode = session.getAttribute("verifyCode")+"";        if(StringUtils.isEmpty(kapchaCode)||!code.toLowerCase().equals(kapchaCode)){            return "验证码输入错误";        }        return "验证成功";    }}
前端代码
        验证码验证  

<script src="https://s3.pstatp.com/cdn/expire-1-M/jquery/3.3.1/jquery.min.js"></script><script type="text/javascript" > $(function(){ //验证按钮点击事件 $("#verify").click(function(){ var code=$("#code").val(); $.ajax({ type:"GET",//方法类型 url:"/verify?code="+code, success:function(result){ $("#verifyResult").html(result); }, error:function(){ alert("请求失败"); }, }); }); });</script>
效果

结束语

生成验证码功能还是比较常用的,所以记录整理一下,方便以后回顾,如果有帮到你们的地方倍感荣幸,有路过的大佬还望不吝雅教!

标签:

最近更新

五分钟搞定验证码,你学会了吗?
2023-04-04 10:20:29
特斯拉一夜蒸发2765亿元!3个月卖了超42万辆车,又推充电新产品,股价却大跌6%,市场在担忧什么?
2023-04-04 09:37:34
当前头条:4月4日生意社白糖基准价为6320.00元/吨
2023-04-04 08:52:33
在岸人民币兑美元较上周五夜盘收跌25个基点_天天头条
2023-04-04 07:45:52
4月3日基金净值:国寿安保中证沪港深300ETF最新净值0.7329,涨0.7%
2023-04-04 06:07:53
世界报道:鹤峰县多措并举保护农民工合法权益
2023-04-03 23:47:53
长安这次完全沦陷了!新车比CS75上档次,11万起长安自愧不如
2023-04-03 21:54:37
辽宁队首发4人合砍3分 12分钟怒进3球半场落后广州队15分-每日速递
2023-04-03 20:47:19
海峡创新:签订3.18亿元鹏博士西北5G大数据产业园项目合同
2023-04-03 19:20:43
香港天星小轮今起加价 成人平日最高票价5港元
2023-04-03 17:53:46
系鞋带视频小学生_系鞋带视频教学
2023-04-03 16:49:06
皓元医药03月28日被沪股通减持12.66万股_环球今日报
2023-04-03 16:11:25
【天天播资讯】*ST中潜(300526)4月3日主力资金净卖出2640.60万元
2023-04-03 15:09:00
焦点消息!重回百元不是梦!OPEC+意外减产后,多位分析师看好油价上涨
2023-04-03 14:45:16
贵州省烟草专卖局2023年公开招聘岗位表下载
2023-04-03 13:44:14
湖南首例!湖南省第二人民医院完成机器人帕金森脑起搏器手术
2023-04-03 12:53:39
美共和党大佬宣布竞选总统 公开叫板特朗普:你应该出局_热头条
2023-04-03 12:26:52
短期胶价震荡偏强:国海良时期货4月3早评_环球快资讯
2023-04-03 12:02:54
外汇技术指标:Ichimoku Forecasting指标
2023-04-03 11:25:56
每日热讯!卓创资讯:3月31日融资买入520.67万元,融资融券余额2527.76万元
2023-04-03 10:05:22
环球热议:南水北调中线一期工程调水超五百五十亿立方米
2023-04-03 09:53:33
暖水袋大概充电充多久? 观察
2023-04-03 09:52:42
【新时代新征程新伟业——真抓实干推动高质量发展】福建:发展新兴产业 构建新发展格局
2023-04-03 09:21:04
【天天快播报】任珂
2023-04-03 08:53:44
荀攸字公达阅读答案_荀攸字公达
2023-04-03 08:45:53
cad画一条带角度的直线_cad画带角度的直线
2023-04-01 12:06:44
中国最美古诗文在线阅读_中国最美古诗词大全?
2023-04-01 10:38:20
每日头条!四方光电:3月31日融资净买入195.99万元,连续3日累计净买入706.04万元
2023-04-01 09:20:47
家长朝九晚五,学生朝八暮四,课后自习到六点能解决接送问题么 当前信息
2023-04-01 08:08:47
3亿罚款已还完!郑爽自曝不雅照欲求复出?网友:这次是真疯了? 焦点热文
2023-04-01 06:14:44