广告
返回顶部
首页 > 资讯 > 后端开发 > Python >java后台验证码生成的实现方法
  • 742
分享到

java后台验证码生成的实现方法

2024-04-02 19:04:59 742人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

效果图如下: 1.适用需求 后台生成验证码,用于登陆验证。 2. 功能实现所需控件/文件: 无(普通标签) 3.功能点实现思路 1)前台思路: (1)前台一个<input&g

效果图如下:

1.适用需求

后台生成验证码,用于登陆验证。

2. 功能实现所需控件/文件:

无(普通标签)

3.功能点实现思路

1)前台思路:

(1)前台一个<input>用于输入验证码;一个<img>用于展示验证码。

(2)验证码生成以及展示,点击刷新功能,可以为<img>绑定click事件。

(3)click事件里面写ajax请求,通过后台生成处理好的带噪点的验证码图片。

注意:后台直接返回图片,不是验证码的字符!若返回字符,则验证码就失去了意义(前台很容易就可以获取验证码字符,进行多次恶意访问了)(这点考虑了系统安全性)

(4)关于返回的图片如何在<img>标签内展示

直接利用img的src属性,属性值为后台生成验证码的方法请求路径即可。当点击验证码的时候,再动态设置src属性即可(原访问地址+随机时间戳,防止同一路径浏览器不另作访问的问题)

前台部分代码:



 
<input class="verifyInput"  name="verifyInput" placeholder="请输入验证码">   
 
 

 
<img class="verifyCode" onclick="changeCode()" src="getVerifyCode">
 
//src的getVerifyCode是后台访问地址;项目SSM框架。
 
 

 
function changeCode(){
 
         var src = " getVerifyCode?"+new Date().getTime(); //加时间戳,防止浏览器利用缓存
 
    $('.verifyCode').attr("src",src);                  //Jquery写法
 
}

2)后台思路:

后台思路很简单,利用BufferedImage类创建一张图片,再用Graphics2D对图片进行绘制(生成随机字符,添加噪点,干扰线)即可。注意生成的验证码字符串要放到session中,用于接下来登陆的验证码验证(当然也是后台)。

部分代码如下:



 
         @RequestMapping("/getVerifyCode ")
 
         public void getVerificationCode(httpservletResponse response,HttpServletRequest request) {
 
                   try {
 
                            int width=200;
 
                            int height=69;
 
         BufferedImage verifyImg=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
 
//生成对应宽高的初始图片
 
                            String randomText = VerifyCode.drawRandomText(width,height,verifyImg);
 
//单独的一个类方法,出于代码复用考虑,进行了封装。
 
//功能是生成验证码字符并加上噪点,干扰线,返回值为验证码字符                   
 
request.getSession().setAttribute("verifyCode", randomText);
 
                   response.setContentType("image/png");//必须设置响应内容类型为图片,否则前台不识别
 
                 OutputStream os = response.getOutputStream(); //获取文件输出流    
 
                 ImageIO.write(verifyImg,"png",os);//输出图片流
 
                 os.flush();
 
                 os.close();//关闭流
 
                   } catch (IOException e) {
 
                            this.logger.error(e.getMessage());
 
                            e.printStackTrace();
 
                   }
 
         }


 
public class VerifyCode {  
 
    public static  String drawRandomText(int width,int height,BufferedImage verifyImg) {
             Graphics2D graphics = (Graphics2D)verifyImg.getGraphics();
             graphics.setColor(Color.WHITE);//设置画笔颜色-验证码背景色
             graphics.fillRect(0, 0, width, height);//填充背景
        graphics.setFont(new Font("微软雅黑", Font.BOLD, 40));
        //数字和字母的组合
String baseNumLetter= = "123456789abcdefghijklmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ";
 
        StringBuffer sBuffer = new StringBuffer();
        int x = 10;  //旋转原点的 x 坐标
        String ch = "";
        Random random = new Random();
        for(int i = 0;i < 4;i++){
                 graphics.setColor(getRandomColor());
            //设置字体旋转角度
            int degree = random.nextInt() % 30;  //角度小于30度
            int dot = random.nextInt(baseNumLetter.length());
            ch = baseNumLetter.charAt(dot) + "";
            sBuffer.append(ch);
            //正向旋转
            graphics.rotate(degree * Math.PI / 180, x, 45);
            graphics.drawString(ch, x, 45);
            //反向旋转
            graphics.rotate(-degree * Math.PI / 180, x, 45);
            x += 48;
        }
        //画干扰线
        for (int i = 0; i <6; i++) {
            // 设置随机颜色
                 graphics.setColor(getRandomColor());
            // 随机画线
                 graphics.drawLine(random.nextInt(width), random.nextInt(height),
                                    random.nextInt(width), random.nextInt(height));
        }
        //添加噪点
        for(int i=0;i<30;i++){
                 int x1 = random.nextInt(width);
                 int y1 = random.nextInt(height);
                 graphics.setColor(getRandomColor());
                 graphics.fillRect(x1, y1, 2,2);
                 }
        return sBuffer.toString();
    }
    
    private static Color getRandomColor() {
        Random ran = new Random();
        Color color = new Color(ran.nextInt(256),
                ran.nextInt(256), ran.nextInt(256));
        return color;
    }
}

4.功能实现心得:

验证码的功能实现思路很简单,从系统安全性和代码复用性这两点考虑,验证码必须后台生成,生成验证码的方法可以封装到静态工具类里。此外,后台用到许多Java自带的图片处理类值得学习

 到此这篇关于java后台验证码生成的实现方法的文章就介绍到这了,更多相关java 验证码生成内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: java后台验证码生成的实现方法

本文链接: https://www.lsjlt.com/news/125914.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • java后台验证码生成的实现方法
    效果图如下: 1.适用需求 后台生成验证码,用于登陆验证。 2. 功能实现所需控件/文件: 无(普通标签) 3.功能点实现思路 1)前台思路: (1)前台一个<input&g...
    99+
    2022-11-12
  • java后台验证码如何生成
    这篇文章给大家分享的是有关java后台验证码如何生成的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。效果图如下:1.适用需求后台生成验证码,用于登陆验证。2. 功能实现所需控件/文件:无(普通标签)3.功能点实现思...
    99+
    2023-06-15
  • 利用java实现验证码生成并完成验证
    利用java实现验证码生成并完成验证?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。java 制作验证码并进行验证实例详解在注册、登录的页面上经常会出现验证码,为...
    99+
    2023-05-31
    java 验证码 ava
  • php验证码后台不能生成怎么办
    本文操作环境:windows7系统、PHP7.1版、DELL G3电脑php验证码后台不能生成怎么办?PHP验证码不能生成图片,原因解决:生成图片时,header('Content-type: image/png');前面不...
    99+
    2021-04-16
    php 验证码
  • Java实现滑动验证码生成(后端工具类)
    目录一、滑动验证码生成思路二、主要方法三、生成代码四、测试结果一、滑动验证码生成思路 1、随机选择一张图片 2、生成滑块起点位置(x, y) 3、生成滑块轮廓 4、抠出滑块 5、将滑...
    99+
    2022-11-13
    Java滑动验证码 Java 验证码
  • ASP.NET生成验证码的方法
    本文实例为大家分享了ASP.NET生成验证码的具体代码,供大家参考,具体内容如下 首先,添加一个一般处理程序 注释很详细了,有不懂的欢迎评论 using System; u...
    99+
    2022-06-07
    net ASP.NET 方法 验证码 ASP
  • Java实现动态验证码生成
    本文实例为大家分享了Java动态验证码生成的具体代码,供大家参考,具体内容如下 说明:今天给大家来带来一个自动生成验证码的处理方法。验证码的出现有效减少了注入灌水以及破解密码等恶意操...
    99+
    2022-11-13
  • Java如何实现验证码生成
    这篇文章主要介绍了Java如何实现验证码生成,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。验证码大家都知道,它的作用也不用我多说了吧。如果不太清楚请参见百度百科中的解释,一般...
    99+
    2023-05-30
    java
  • php后台验证码加密方法怎么实现
    在 web 开发中,验证码(CAPTCHA)是一种用于验证用户操作合法性的工具。例如,在提交表单时,服务器可以生成一张验证码图片,在用户正确输入验证码后再处理表单数据,这样可以防止机器自动提交表单,保护网站数据的安全性。在 PHP 后台开发...
    99+
    2023-05-14
  • php后台验证码加密方法如何实现
    这篇文章主要介绍“php后台验证码加密方法如何实现”,在日常操作中,相信很多人在php后台验证码加密方法如何实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”php后台验证码加密方法如何实现”的疑惑有所帮助!...
    99+
    2023-07-05
  • springboot验证码的生成与验证的两种方法
    目录前言效果一览(单击图片刷新验证码)一、使用整合kaptcha方式实现验证码生成与验证二、使用hutool-captcha方式实现验证码生成与验证前言 在springboot的登陆...
    99+
    2022-11-13
  • java随机验证码生成实现实例代码
    java随机验证码生成实现实例代码摘要: 在项目中有很多情况下都需要使用到随机验证码,这里提供一个java的随机验证码生成方案,可以指定难度,生成的验证码可以很方便的和其他组件搭配之前要使用一个生成随机验证码的功能,在网上找了一下,有很多的...
    99+
    2023-05-31
    java 随机 验证码
  • python生成图片验证码的方法
    背景 在注册或者登陆场景下,经常会遇到需要输入图片验证码的情况,最经典的就是12306买火车票。图片验证码的破解还是有一定难度的,而且如果配合上时间和次数的验证,可以很大程度上防止模...
    99+
    2022-11-10
  • QT生成随机验证码的方法
    本文实例为大家分享了QT生成随机验证码的具体代码,供大家参考,具体内容如下 一、先创建一个QT应用程序,在ui中添加一个QFrame控件,后期将这个控件提升为下面自己实现验证码的类就...
    99+
    2022-11-13
  • java实现随机验证码图片生成
    本文实例为大家分享了java生成随机验证码图片的具体代码,供大家参考,具体内容如下 1.controller @GetMapping(value = "/getRan...
    99+
    2022-11-12
  • 如何解决php验证码后台不能生成的问题
    这篇文章将为大家详细讲解有关如何解决php验证码后台不能生成的问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。php验证码后台不能生成的解决办法:1、添加“header('Content-typ...
    99+
    2023-06-25
  • SpringBoot实现Thymeleaf验证码生成
    使用后台返回验证码图片,验证码存到session中后端实现校验,前端只展示验证码图片。 本篇用SpringBoot Thymeleaf实现验证码生成。 创建springboot项...
    99+
    2022-11-12
  • 基于Java生成图片验证码的方法解析
    目录使用Java生成图片验证码完全解析注意事项如何加入噪点如何生成干扰线什么样的算法生成噪点比较好验证码如何避免被ocr识别如何斜放文本四位图形验证码调整噪点的透明度使用Java生成...
    99+
    2023-02-06
    Java生成图片验证码 Java图片验证码 Java验证码
  • python验证码生成的方法是什么
    Python中生成验证码的方法有多种,以下是其中一种常用的方法:1. 使用Python的Pillow库来生成验证码图像,然后将图像保...
    99+
    2023-08-25
    python
  • Vue实现图片验证码生成
    图片验证码主要用于注册,登录等提交场景中,目的是防止脚本进行批量注册、登录、灌水,相比不带图片验证的安全度有所提高,不过目前也有自动识别图片验证码的程序出现,基本都是付费识别,随之又...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作