注册中验证码实现(项目案例)

简介: 今天,给大家介绍验证码的相关配置问题。众所周知,对传统验证码而言,便捷和安全长期以来一直是鱼与熊掌的关系。这可从12306与黄牛的博弈中看出端倪。

今天,给大家介绍验证码的相关配置问题。众所周知,对传统验证码而言,便捷和安全长期以来一直是鱼与熊掌的关系。这可从12306与黄牛的博弈中看出端倪。


最先开始,只是简单的数字英文组合,再后来有了加减法,相信一般人也可以应付。


20210118111933410.jpg


直到出现一闪一闪的动态验证码和变形字母,第一次体会到眼睛都快看瞎了,还有输不对的情况~


20210118111946340.gif


但这些与后来的图片验证码相比,还只是小儿科,不信你看:


20210118112000772.jpg


网友戏称:不懂娱乐圈,没资格买票回家。


验证码相关配置



不过对于我们一般小型系统而言,那么复杂的验证码确实没必要,简单的英文数字组合肯定够了。


今天就给大家介绍如何配置英文数字组合验证码。


配置比较简单,首先在JSP界面引入验证码:


<div class="form-group">
<label for="yanzheng" class="col-sm-2 control-label">验证码</label>
<div class="col-sm-6">
  <input name="inputCode" value=""/>  
  <img border="0" src="${pageContext.request.contextPath }/checkCode" />
     <input type="button" value="换一张" onclick="history.go(0) "/>
</div>
</div>


然后引入工具类CheckCode:


public class CheckCodeServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws                    ServletException, IOException {
doPost(request,response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws                             ServletException, IOException {
   response.setContentType("image/jpeg");
   HttpSession session = request.getSession();
   int width = 60;
   int height = 20;
   //设置浏览器不要缓存此图片
   response.setHeader("Pragma", "No-cache");
   response.setHeader("Cache-Control", "no-cache");
   response.setDateHeader("Expires", 0);
   //创建内存图像并获得其图形上下文
   BufferedImage image = new BufferedImage(width,                                   height,BufferedImage.TYPE_INT_RGB);
   Graphics g = image.getGraphics();
    // 产生随机验证码
    //定义验证码的字符表
   String chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
   char[] rands = new char[4];
   for(int i = 0; i < 4; i++) {
      int rand = (int) (Math.random() * 36);
      rands[i] = chars.charAt(rand);
   }
    // 产生图像
   //画背景
   g.setColor(new Color(0xDCDCDC));
   g.fillRect(0, 0, width, height);
   //随机产生120个干扰点
   for(int i = 0; i < 120; i++) {
      int x = (int)(Math.random() * width);
      int y = (int)(Math.random() * height);
      int red = (int)(Math.random() * 255);
      int green = (int)(Math.random() * 255);
      int blue = (int)(Math.random() * 255);
      g.setColor(new Color(red, green, blue));
      g.drawOval(x, y, 1, 0);
   }
   g.setColor(Color.BLACK);
   g.setFont(new Font(null, Font.ITALIC|Font.BOLD, 18));
   //在不同的高度上输出验证码的不同字符
   g.drawString("" + rands[0], 1, 17);
   g.drawString("" + rands[1], 16, 15);
   g.drawString("" + rands[2], 31, 18);
   g.drawString("" + rands[3], 46, 16);
   g.dispose();
   //将图像输出到客户端
   ServletOutputStream sos = response.getOutputStream();
   ByteArrayOutputStream baos = new ByteArrayOutputStream();
   ImageIO.write(image, "JPEG", baos);
   byte[] buffer = baos.toByteArray();
   response.setContentLength(buffer.length);
   sos.write(buffer);
   baos.close();
   sos.close();
   //将验证码放到 session 中
   session.setAttribute("checkCode", new String(rands));
}
}
 验证码放到session中后,在Controller中获取session,然后与前台输入对比:
 String sc=(String)session.getAttribute("checkCode");
 if(sc.equals(inputCode)){
   //对比验证码即可
 }


以上就是验证码的全部代码实现。如果你有任何问题,欢迎私信,我们共同交流讨论。


相关文章
layui框架实战案例(10):短信验证码60秒倒计时
layui框架实战案例(10):短信验证码60秒倒计时
329 0
|
2月前
|
测试技术
自动化测试项目实战笔记(三):测试用户注册(验证码错误,成功,出现弹框时处理)
本文是关于自动化测试项目实战笔记,主要介绍了如何测试用户注册功能,包括验证码错误、注册成功以及弹框处理的测试步骤和代码实现。
134 2
自动化测试项目实战笔记(三):测试用户注册(验证码错误,成功,出现弹框时处理)
|
2月前
|
数据采集 自然语言处理 API
Python反爬案例——验证码的识别
Python反爬案例——验证码的识别
49 2
|
2月前
|
存储 前端开发 Java
验证码案例 —— Kaptcha 插件介绍 后端生成验证码,前端展示并进行session验证(带完整前后端源码)
本文介绍了使用Kaptcha插件在SpringBoot项目中实现验证码的生成和验证,包括后端生成验证码、前端展示以及通过session进行验证码校验的完整前后端代码和配置过程。
311 0
验证码案例 —— Kaptcha 插件介绍 后端生成验证码,前端展示并进行session验证(带完整前后端源码)
|
3月前
|
存储 NoSQL Java
|
6月前
|
缓存 NoSQL Java
案例 采用Springboot默认的缓存方案Simple在三层架构中完成一个手机验证码生成校验的程序
案例 采用Springboot默认的缓存方案Simple在三层架构中完成一个手机验证码生成校验的程序
124 5
|
6月前
|
存储 JavaScript 前端开发
Python Django下的实现注册验证码
摘要: 使用Python生成随机验证码图像,包括干扰线和噪点,保存到静态文件夹,并将验证码文本存储到数据库。数据库表包含ID、验证码图片路径和验证码文本。JavaScript函数`getRandomInt`生成1到300的随机数,用于请求对应数据库条目的验证码和图片。XMLHttpRequest发送POST请求到服务器,视图函数返回指定ID的验证码图片路径,实现验证码的动态刷新。
|
6月前
|
Java
JavaSE——基于案例的基础语法练习(买飞机票、验证码、评委打分、数组拷贝、找素数)
JavaSE——基于案例的基础语法练习(买飞机票、验证码、评委打分、数组拷贝、找素数)
67 5
|
6月前
|
存储 缓存 前端开发
综合性练习(验证码案例)
综合性练习(验证码案例)
70 6
|
机器人 UED Python
基于Python+Flask实现一个简易网页验证码登录系统案例
基于Python+Flask实现一个简易网页验证码登录系统案例
226 0