java实现验证码功能,java编写验证码

  java实现验证码功能,java编写验证码

  写爬虫互联网协议(互联网协议)被封了怎么解决?立即使用

  我们先来看下效果:

  (学习视频推荐:java课程)

  一、适用需求

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

  二、实现流程

  1、视图层思路

  (1)输入用于输入验证码,一个图片用于展示验证码

  (2)校验输入的验证码是否合格,双击图片刷新验证码,绑定onblue失去焦点事件(鼠标失去焦点时触发的事件)

  (3)蓝色事件中做校验,

  (4)img中的科学研究委员会属性值为后台生成验证码的方法请求路径(即请求映射的路径),当再点击验证码的时候,再动态设置科学研究委员会属性即可(原访问地址随机时间戳,防止同一路径浏览器不另做访问的问题)

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

  2、后端思路

  利用图片类创建一张图片,再用图形2D对图片进行绘制(生成随机字符,添加干扰线)即可,注意:生成的验证码字符串要放到会议中,用于接下来登陆的验证码验证(当然也是后台)。

  前端代码如下:

  td class=tds 验证码:/td

  任务描述

  input type= text name= valistr onblur= checkNull( valistr ,验证码不能为空!)

  img id= yzm _ img src= $ { pagecontext。请求。上下文路径}/servlet/valimgservlet style= cursor:pointer onclick= changeYZM(this)/

  span id=valistr_msg/span

  /td

  /**

  * 校验字段是否为空

  */

  函数checkNull(名称,消息){

  setMsg(名称,)

  var v=文档。getelementsbyname(name)[0].价值;

  if(v==){

  setMsg(名称,消息)

  返回错误的

  }

  返回真实的

  }

  /**

  * 为输入项设置提示消息

  */

  函数setMsg(名称,消息){

  var span=文档。getelementbyid(name _ msg );

  跨度。innerhtml= font color= red msg /font;

  }

  /**

  * 点击更换验证码

  */

  函数changeYZM(imgObj){

  imgo bj。src=“$ { pagecontext。请求。上下文路径}/servlet/valimgservlet?时间=新日期()。getTime();

  }后端代码如下:

  包cn。特都。web

  导入cn。特都。util。验证代码;

  导入javax。servlet。servlet异常;

  导入javax。servlet。http。http servlet

  导入javax。servlet。http。http servlet请求;

  导入javax。servlet。http。http servlet响应;

  导入javax。servlet。http。http会话;

  导入Java。io。io异常;

  /**

  * 获取验证码

  */

  公共类ValiImgServlet扩展HttpServlet {

  受保护的void doPost(HttpServletRequest请求,HttpServletResponse响应)引发ServletException,IOException {

  //禁止浏览器缓存验证码

  回应。设置日期头( Expires ,-1);

  回应。设置标题(“缓存控制”、“无缓存”);

  response.setHeader(Pragma , no-cache );

  //生成验证码

  验证码VC=新验证码();

  //输出验证码

  VC。绘制图像(响应。获取输出流());

  //获取验证码的值,存储到会议中

  字符串valistr=VC。get code();

  http会话session=请求。getsession();

  session.setAttribute(valistr ,valistr);

  //打印到控制台

  系统。出去。println(valistr);

  }

  受保护的void doGet(HttpServletRequest请求,HttpServletResponse响应)引发ServletException,IOException {

  doPost(请求、响应);

  }

  }包cn。特都。util

  导入Java。awt。颜色;

  导入Java。awt。字体;

  导入Java。awt。图形2d;

  导入Java。awt。形象。缓冲图像;

  导入Java。io。文件;

  导入Java。io。filenotfoundexception

  导入Java。io。文件输出流;

  导入Java。io。输出流;

  导入Java。util。随机;

  导入javax。imageio。imageio

  /**

  * 动态生成图片

  */

  公共类验证码{

  //{宋体, 华文楷体, 黑体, 华文新魏, 华文隶书, 微软雅黑, 楷体_GB2312}

  私有静态字符串[] fontNames={ 宋体, 华文楷体, 黑体, 微软雅黑, 楷体_ GB 2312 };

  //可选字符

  // 23456789 abcdefghjkmnopqrstuvwxyzabcdefghjkmnpqrstuvwxyz ;

  私有静态字符串代码= 23456789 abcdefghjkmnopqrstuvwxyzabcdefghjkmnpqrstuvwxyz ;

  //背景色

  私有颜色背景颜色=新颜色(255,255,255);

  //基数(一个文字所占的空间大小)

  私有int base=30

  //图像宽度

  private int width=base * 4;

  //图像高度

  private int height=base

  //文字个数

  private int len=4;

  //设置字体大小

  private int fontSize=22

  //验证码上的文本

  私有字符串文本;

  私有BufferedImage img=null

  私有图形2D g2=空

  /**

  * 生成验证码图片

  */

  公共void绘制图像(输出流输出流){

  //1.创建图片缓冲区对象,并设置宽高和图像类型

  img=新缓冲区尺寸(宽度,高度,BufferedImage .TYPE _ INT _ RGB);

  //2.得到绘制环境

  G2=(图形2d)img。获取图形();

  //3.开始画图

  //设置背景色

  G2。设置颜色(bgColor);

  g2.fillRect(0,0,宽度,高度);

  字符串缓冲区sb=新字符串缓冲区();//用来装载验证码上的文本

  for(int I=0;我leni ) {

  //设置画笔颜色-随机

  //g2.setColor(新颜色(255,0,0));

  G2。设置颜色(新颜色(getRandom(0,150),getRandom(0,150),get random(0,150)));

  //设置字体

  g2.setFont(新字体(fontNames[getRandom(0,fontNames.length)],字体. BOLD,font size));

  //旋转文字(-45~ 45)

  int theta=getRandom(-45,45);

  g2 .旋转(*数学.圆周率/180.7 I *底,高-8);

  //写字

  字符串代码=代码。charat(get random(0,codes。length()))“”;

  g2。抽绳(码,7 i *底,高-8);

  某人(somebody的简写)追加(代码);

  g2 .旋转(-theta * Math .圆周率/180.7 I *底,高-8);

  }

  这个。text=sb。tostring();

  //画干扰线

  for(int I=0;我借2;i ) {

  //设置画笔颜色-随机

  //g2.setColor(新颜色(255,0,0));

  g2.setColor(新颜色(getRandom(0,150),getRandom(0,150),

  getRandom(0,150)));

  g2.drawLine(getRandom(0,120),getRandom(0,30),getRandom(0,120),

  getRandom(0,30));

  }

  //TODO:

  g2.setColor(颜色。灰色);

  g2.drawRect(0,0,this.width-1,this。高度-1);

  //4.保存图片到指定的输出流

  尝试{

  ImageIO.write(this.img, JPEG ,输出流);

  } catch(异常e) {

  e。printstacktrace();

  抛出新的运行时异常(e);

  }最后{

  //5.释放资源

  G2。dispose();

  }

  }

  /**

  * 获取验证码字符串

  * @返回

  */

  公共字符串getCode() {

  返回这个. text

  }

  /*

  * 生成随机数的方法

  */

  私有静态int getRandom(int start,int end) {

  Random Random=new Random();

  返回随机的。nextint(end-start)start;

  }

  /*公共静态void main(String[] args)引发异常{

  验证码VC=新验证码();

  VC。绘制图像(新文件输出流( f:/VC。jpg’));

  System.out.println(执行成功~!);

  }*/

  }总结:

  简介:是"区分计算机和人类的全自动公共图灵测试"(全自动区分计算机和人类的图灵测试)的缩写,是一种区分用户是计算机还是人的公共全自动程序。

  历史:是"区分计算机和人类的全自动公共图灵测试"(全自动区分计算机和人类的图灵测试)的缩写,是一种区分用户是计算机还是人的公共全自动程序。

  作用:防止恶意破解密码、刷票、论坛灌水、刷页。

  分类:Gif动画验证码,手机短信验证码,手机语音验证码,视频验证码

  常见的验证码:

  (1)四位数字和字母,可能都是字母,也可能都是数字,随机的四位字符串,最原始的验证码,验证作用几乎为零106 .程序员网站用户登录用的是GIF格式格式格式,常用的随机数字图片验证码。图片上的字符比较中规中矩,验证作用比上一个好。

  (2)汉字是目前注册的最新验证码,随机生成,不易键入,如QQ申诉页面。

  (3)申请3)MS的hotmail时,是BMP格式,随机数字,随机大写字母,随机干扰像素的随机位置。

  (4)韩语或日语。现在用韩语在HF上注册MS比较难。

  (5)谷歌的Gmail注册是JPG格式,随机英文字母,随机颜色,随机位置,随机长度。

  (6)其他论坛为XBM格式,内容随意。

  (7)广告验证码:只需输入广告中的部分内容。特点是能给网站带来额外收入,让用户耳目一新。广告验证码

  (8)问题验证码:问题验证码主要以问答形式填写。它的视图比添加模块的验证码更容易识别和输入,系统可以生成诸如“1 ^ 2=?”让用户回答问题,当然这样的问题是随机产生的。另一种问题验证码是文本问题验证码,比如问题“中国的全称是什么?”当然,有些网站也会在提问后给出提示回答或者直接回答。

  推荐:java介绍以上是使用java生成后台验证码的细节。更多请关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • qq短信验证码发送失败怎么回事,qq验证码失败是怎么回事
  • ,,使用阿里大于(大鱼)平台进行发送手机验证码的流程
  • ,,SpringSceurity实现短信验证码登陆
  • android读取短信验证码,
  • android读取短信验证码,,Android使用MobSDK短信验证
  • android自动获取短信验证码功能在哪,安卓自动获取短信验证码
  • android自动获取短信验证码功能在哪,android自动获取短信验证码功能失效,Android自动获取短信验证码功能
  • android实现短信验证码自动填写功能是什么,安卓短信验证码自动填充 实现
  • android实现短信验证码自动填写功能是什么,安卓短信验证码自动填充 实现,Android实现短信验证码自动填写功能
  • android如何通过手机自动获取短信验证码信息,安卓自动获取短信验证码
  • android如何通过手机自动获取短信验证码信息,安卓自动获取短信验证码,Android如何通过手机自动获取短信验证码
  • ,,python网络爬虫实现发送短信验证码的方法
  • ,,Python实现滑块拼图验证码详解
  • ,,python3 破解 geetest(极验)的滑块验证码功能
  • 发验证码不在桌面显示,验证码能收到桌面上不显示怎么回事
  • 留言与评论(共有 条评论)
       
    验证码: