Java实现图形验证码功能

 时间:2024-11-15 07:10:48

我们在网页登录的时候,经常会看到需要输入图形验证码的功能,今天我们自己来实现以下这个功能。这个功能需要两步来完成,首先我们需要开发一个图形验证码的接口,它的作用是在登录页面的表单上显示出图形验证码,然后我们还需要在认证流程中加入图形验证码的校验,下面就跟着小编一起来实现吧。

工具/原料

IntelliJIDEA

生成图形验证码

1、首先根据随机数生成图片,我们先生成验证码,创建ValidateCode类,包含code和expireTime,即验证码的数字和失效时间。创建ImageCode类继承ValidateCode。

Java实现图形验证码功能

Java实现图形验证码功能

2、接下来我们创建一个生成验证码的方法。@Get怡觎现喾Mapping("/code/image")publicvoidcreateCode(H墉掠载牿ttpServletRequestrequest,HttpServletResponseresponse){ImageCodeimageCode=createImageCode(request);}

Java实现图形验证码功能

3、接下来我来写createImageCode方瓠鲶陋啼法。/***生成验证码*@paramrequest*@return*/priva墉掠载牿teImageCodecreateImageCode(HttpServletRequestrequest){intwidth=67;intheight=23;BufferedImageimage=newBufferedImage(width,height,BufferedImage.TYPE_INT_RGB);Graphicsg=image.getGraphics();Randomrandom=newRandom();g.setColor(getRandColor(200,250));g.fillRect(0,0,width,height);g.setFont(newFont("TimesNewRoman",Font.ITALIC,20));g.setColor(getRandColor(160,200));for(inti=0;i<155;i++){intx=random.nextInt(width);inty=random.nextInt(height);intxl=random.nextInt(12);intyl=random.nextInt(12);g.drawLine(x,y,x+xl,y+yl);}StringsRand="";for(inti=0;i<4;i++){Stringrand=String.valueOf(random.nextInt(10));sRand+=rand;g.setColor(newColor(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));g.drawString(rand,13*i+6,16);}g.dispose();//60秒的失效时间returnnewImageCode(image,sRand,60);}/***生成随机背景条纹**@paramfc*@parambc*@return*/privateColorgetRandColor(intfc,intbc){Randomrandom=newRandom();if(fc>255){fc=255;}if(bc>255){bc=255;}intr=fc+random.nextInt(bc-fc);intg=fc+random.nextInt(bc-fc);intb=fc+random.nextInt(bc-fc);returnnewColor(r,g,b);}

Java实现图形验证码功能

4、将随机数存到session中。privateSessionStrategysessionStrategy=newHttpSessionSessionStrategy();sessionStrategy.setAttribute(newServletWebRequest(request),SESSION_KEY,imageCode);

Java实现图形验证码功能

5、再将生成的图片写到接口的响应中。ImageIO.write(imageCode.getImage(),"JPEG",response.getOutputStream());这个方法会抛出IO异常,我们继续将异常抛出即可。

Java实现图形验证码功能

6、最后我们再来介绍一下验证码校验的功能,这个功能通过过滤器Filter来实现。我们创建ValidateCodeFilter过滤器,在doFilterInternal方法中处理验证码的校验。

Java实现图形验证码功能

padding影响宽度怎么办 如何卸载python的scipy模块 操作系统创建本地组的步骤 详解MongoDB如何更新文档 ( 增加和删除属性 ) 魔兽争霸RPG守护龟龟循环圈攻略
热门搜索
最正常的白带图片 卫生棉条的用法图片 张莜雨人体图片 华丽一族动漫 美女校花图片