首页 > 其他分享 >验证码案例的实现---MyBatis+Session+Cookie

验证码案例的实现---MyBatis+Session+Cookie

时间:2022-10-29 23:45:40浏览次数:53  
标签:checkCode 验证码 --- getElementById Session Cookie document os 图片

展示验证码(jsp页面)

首先,我们需要自己利用BufferedImage类去生成一张可以变换的验证码图片;

之后,我们就可以利用这样一串代码去将验证码里面的内容获取到:

这是一串测试代码:

OutputStream os=new FileOutputStream("e://a.jpg");//为存放验证码图片的地址
        String CheckCode=checkCode.outputVerifyImage(100,50,os,4);//固定验证码图片的大小,以及确定出每次图片里面出现的字符个数
        System.out.println(CheckCode);//输出测试一下上述条件是否成立

验证码图片在jsp的注册界面这样放置:

如果这样写的话,就会把验证码写死,不能够实现灵活变换,所以需要进行优化

优化之后:

将生成的验证码图片放在该servlet里面,实现刷新即变换图片------更加灵活一些

在成功写完一个验证码图片的程序(checkCode.java)之后,需要在checkServlet里面调用,将以下代码写在doGet方法里面:

ServletOutputStream os=resp.getOutputStream();
        String checkCode=checkCode.outputVerifyCode(100,50,os,4);

这样就实现了点击刷新就能够更换验证码的目的了

接下来,就需要去实现点击右边的看不清就能够实现验证码图片的更换:

在分别为图片看不清添加id的同时,再利用js实现随机更换,且不会出现同一个随机数而导致的缓存(这会导致图片无法继续更换)

<script>
    document.getElementById("changImg").onclick=function(){
      document.getElementById("checkCodeImg").src="/ttCookieLogin/checkServlet?"+new Date().getMilliseconds();
    }
  </script>

若是要为图片本身增加单击事件的话,大概代码是这样的:

<script>
    document.getElementById("checkCodeImg").onclick=function(){
      document.getElementById("checkCodeImg").src="/ttCookieLogin/checkServlet?"+new Date().getMilliseconds();
    }
  </script>

校验验证码(一存一取一比对)

将从jsp页面获取到的验证码存入session中(在checkServlet.java里面写入)

HttpSession session=req.getSession();
req.setAttribute("checkCode",checkCode);

然后在注册页面的后端得到session存储的验证码数据:

然后获得文本框里面的数据:

之后在注册成功之前进行比对:

这样就OK啦!

标签:checkCode,验证码,---,getElementById,Session,Cookie,document,os,图片
From: https://www.cnblogs.com/liuzijin/p/16839966.html

相关文章

  • Blog-2
    一、**题目:7-2点线形系列4-凸四边形的计算分数 70作者 蔡轲单位 南昌航空大学用户输入一组选项和数据,进行与四边形有关的计算。以下四边形顶点的......
  • JAVA-事件监听机制
    packagecom.itheima;importjavax.swing.*;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;publicclassJFrame11{publicstati......
  • [CSP-J 2022] 代码
    pow点击查看代码#include<bits/stdc++.h>#definelllonglongusingnamespacestd;lla,b,i,ans;intmain(){ freopen("pow.in","r",stdin); freopen("pow.out"......
  • #yyds干货盘点#Vue3.2 新指令 v-memo解析
    v-memo官方定义缓存一个模板的子树。在元素和组件上都可以使用。为了实现缓存,该指令需要传入一个固定长度的依赖值数组进行比较。如果数组里的每个值都与最后一次的渲染相......
  • 重建控制文件出现ORA-01159、ORA-01517告警
    问题描述:将windows上的数据文件、控制文件拷贝到linux相应目录后,重建控制文件出现ORA-01159、ORA-01517告警,如下所示:源端:windows200332位+oracle10.2.0.432位目标端:ce......
  • JavaWeb-MySQL基础
    JavaWeb-MySQL基础1,数据库相关概念1.1数据库存储和管理数据的仓库,数据是有组织的进行存储。数据库英文名是DataBase,简称DB。数据库就是将数据存储在硬盘上,可......
  • 「规则类怪谈」塔 - (preview)
      前段时间,大概五六月份,我很喜欢规则类怪谈。颓废的时候读了一大堆质量参差不齐的作品,试着编了一个世界观然后开写。咕着咕着磨到现在,至少情节大概成形了。最大的阻力在......
  • 编程开发-面试-数据分析视频教程阿里云盘资源大全
    编程开发-面试-数据分析教程合集6.6T(最全)Python编程教程合集(80套207GB)Java-30套Web-28套C-C++29套Go-15套Spring-29套Linux-10套面试通关人工智能_云计算R......
  • JAVA-考勤查询
    packagecom.itheima;importjavax.swing.*;publicclassJFrame09{publicstaticvoidmain(String[]args){JFramejf=newJFrame();jf.s......
  • libusb系列-005-部分API简介
    libusb系列-005-部分API简介文章目录​​libusb系列-005-部分API简介​​​​摘要​​​​libusb_init​​​​libusb_open_device_with_vid_pid​​​​libusb_kernel_driv......