<强> Java生成验证码的流程是:强>
<强> Java验证验证码的流程是:强>
下面通过一个例子来展示验证码的生成流程,该例子使用基本Java春天框架的其他接口,可以使用任何平台来获取验证码:
服务器处理验证码的例子:
/* * *接收验证码请求 */@RequestMapping (value=" https://www.yisu.com/zixun/captchacode ") 公共空间CaptchaCode () { 尝试{ .getCode CaptchaCodeModel CaptchaCodeModel=new CaptchaCode () ();//将验证码放到会话中 HttpServletRequest HttpServletRequest=super.getRequest (); httpServletRequest.getSession ()。setAttribute (“captchacodekey captchaCodeModel.getCaptchaCode ());//将图片写到客户端 HttpServletResponse HttpServletResponse=super.getResponse ();//禁止缓存 httpServletResponse。setHeader(“杂注”,“no - cache”); httpServletResponse。setHeader(“cache - control”、“no - cache”); httpServletResponse。setDateHeader(“到期”,0); ServletOutputStream ServletOutputStream=httpServletResponse.getOutputStream ();//输出图片 ImageIO.write (captchaCodeModel.getCaptchaImage (), jpeg, servletOutputStream); servletOutputStream.close (); }捕捉(异常e) { logger.info(“验证码生成失败:“+ e.getMessage ()); } }
公开课CaptchaCode { 私人int宽度=90;//定义图片的宽度 私人int高度=20;//定义图片的高度 私人int codeCount=4;//定义图片上显示验证码的个数 私人int xx=15; 私人int fontHeight=18; 私人int codeY=16; char [] codeSequence={A, B, C, D, E, F, G, H,“我”、“J”, ‘K’,‘L’,‘米’,‘N’,‘O’,‘P’,‘问’,‘R’,‘S’,‘T’,‘你’,‘V’,‘W’, ' X ', ' Y ', ' Z ', ' 0 ', ' 1 ', ' 2 ', ' 3 ', ' 4 ', ' 5 ', ' 6 ', ' 7 ', ' 8 ', ' 9 '};
公共CaptchaCodeModel getCode()抛出IOException {//定义图像缓冲区 BufferedImage buffImg=new BufferedImage(宽度、高度, BufferedImage.TYPE_INT_RGB); 图形gd=buffImg.getGraphics ();//创建一个随机数生成器类 随机随机=new随机();//将图像填充为白色 gd.setColor (Color.WHITE); gd。fillRect(0, 0,宽度、高度);//创建字体,字体的大小应该根据图片的高度来定。=新字体(字体字体“Fixedsys”,字体。大胆,fontHeight);//设置字体。 gd.setFont(字体);//画边框。 gd.setColor (Color.BLACK); gd。宽度绘制矩形(0,0,- 1,- 1)高度;//随机产生40条干扰线,使图象中的认证码不易被其它程序探测到。 gd.setColor (Color.BLACK); for (int i=0;我& lt;40;我+ +){ int x=random.nextInt(宽度); int y=random.nextInt(高度); int xl=random.nextInt (12); int yl=random.nextInt (12); gd。画直线(x + xl x, y, y +黄); }//randomCode用于保存随机产生的验证码,以便用户登录后进行验证。 StringBuffer randomCode=new StringBuffer (); int红色=0,绿色=0,蓝色=0;//随机产生codeCount数字的验证码。 for (int i=0;我& lt;codeCount;我+ +){//得到随机产生的验证码数字。 字符串代码=String.valueOf (codeSequence [random.nextInt (36)]);//产生随机的颜色分量来构造颜色值,这样输出的每位数字的颜色值都将不同。 红色=random.nextInt (255); 绿色=random.nextInt (255); 蓝色=random.nextInt (255);//用随机产生的颜色将验证码绘制到图像中。 gd。改变颜色(新颜色(红、绿、蓝)); gd。拉带(代码,(i + 1) * xx, codeY);//将产生的四个随机数组合在一起。 randomCode.append(代码); } CaptchaCodeModel CaptchaCodeModel=new CaptchaCodeModel (); captchaCodeModel.setCaptchaCode (randomCode.toString ()); captchaCodeModel.setCaptchaImage (buffImg); 返回captchaCodeModel; } 公开课CaptchaCodeModel {//验证码的字符串形式 私人字符串captchaCode;//验证码的图片形式 私人BufferedImage captchaImage; 公共字符串getCaptchaCode () { 返回captchaCode; } 公共空间setCaptchaCode(字符串captchaCode) { 这一点。captchaCode=captchaCode; } 公共BufferedImage getCaptchaImage () { 返回captchaImage; } 公共空间setCaptchaImage (BufferedImage captchaImage) { 这一点。captchaImage=captchaImage; } } >之前
/* * *验证验证码 */@RequestMapping (value=" https://www.yisu.com/zixun/valicatpcha ") 公共空间register_R () { PageData PageData=https://www.yisu.com/zixun/super.getPageData ();//获取验证码 字符串captchaCode=pageData.getString (“captchaCode”); HttpServletRequest HttpServletRequest=super.getRequest (); 对象codeObject=httpServletRequest.getSession () .getAttribute (“captchacodekey”);//验证码错误 如果(codeObject==null | | Tools.isEmptyString (captchaCode) | | ! String.valueOf (codeObject) .toUpperCase () .equals (captchaCode.toUpperCase ())) { setResult ( MessageManager.getInstance () .getMessage (“invalidcaptcha”), ResultType.Error); 返回; } }Java生成验证码