主要思路:

1) 打开页面生成随机验证码图片, 可更换图片,通过java后端实现。同时把生成的验证码保存在session作用域中。

2)用户输入验证码,提交

3)获取页面提交的验证码 和 保存在session作用域中的验证码,两者比较,相等后删除保存在session作用域中的验证码。

1、页面

<body><h4>登录页面 </h4><form action="<%=request.getContextPath() %>/login" method="post" id="loginForm">用户名: <input type="text" id="username" name="username" required="required"/><br/>密    码: <input type="password" id="password" name="password"/><br/>验证码:<input type="text" name="verificationCode"/><!-- src 此时使用loginServlet的get提交方法, 使用框架时,对应验证方法名的路径 --><img id="imgObj" alt="验证码" src="<%=request.getContextPath() %>/login" onclick="changeImg()"><a href="javascript: void(0)" onclick="changeImg()">换一张</a> <br/> <input type="submit" value="登录" id ="submitbtn"/></form><br/><span style="color:red;">${errorMsg }</span>
</body>
<script type="text/javascript" src="${pageContext.request.contextPath}/static/js/jquery-3.3.1.min.js"></script>
<script type="text/javascript">function changeImg(){// 刷新图片 var imgObj = $("#imgObj");var src = imgObj.attr("src");imgObj.attr("src", changeUrl(src));};//为了使每次生成图片不一致,即不让浏览器读缓存,所以需要加上时间戳  function changeUrl(url){var timestamp  = (new Date()).valueOf();var index = url.indexOf("?",url);if (index > 0) {  url = url.substring(0, url.indexOf( "?"));   }  if ((url.indexOf("&") >= 0)) {  url = url + "×tamp=" + timestamp ;  } else {  url = url + "?timestamp=" + timestamp ;  }  return url; }
</script>

2、servlet

public class LoginServlet extends HttpServlet{private static final long serialVersionUID = 1L;@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//生成验证码verificationCode(request, response);doPost(request, response);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("utf-8");response.setCharacterEncoding("utf-8");response.setContentType("text/html;charset=UTF-8");//获得登录的账号和密码String username = request.getParameter("username");String password = request.getParameter("password");String requestVerificationCode = request.getParameter("verificationCode");System.out.println(requestVerificationCode);HttpSession session = request.getSession();String sessionVerificationCode = (String) session.getAttribute("verificationCode");//验证验证码(忽略验证码大小写)if(sessionVerificationCode.equalsIgnoreCase(requestVerificationCode)) {session.removeAttribute("verificationCode"); if(username.equals("admin") && password.equals("admin123")){//登录成功//重定向到index.jspresponse.sendRedirect(request.getContextPath() +"/index.jsp"); }else{//登录失败request.setAttribute("errorMsg", "用户名或密码不正确");request.getRequestDispatcher("/login.jsp").forward(request, response);}}else {request.setAttribute("errorMsg", "验证码不正确!");request.getRequestDispatcher("/login.jsp").forward(request, response);}}public void verificationCode(HttpServletRequest request, HttpServletResponse response) throws IOException {//设置响应的类型格式为图片格式, 并禁止缓存response.setContentType("image/jpg");response.setHeader("Pragma", "no-cache");response.setHeader("Cache-Control", "no-cache");response.setDateHeader("Expires", 0);VerificationCodeImgUtil vCode = new VerificationCodeImgUtil(120,25,5,50);//把随机产生的验证码保存在session作用域中request.getSession().setAttribute("verificationCode", vCode.getValidateCode());vCode.write(response.getOutputStream(), "jpg");}}

3、VerificationCodeImgUtil 类

Java图片验证码生成工具类

4、测试

   

JavaWeb 登录实现图片验证码相关推荐

  1. 登录功能图片验证码的实现

    首先从网上下载一个生成验证码的Servlet: package com.train.controller;import java.awt.Color; import java.awt.Font; im ...

  2. 登录注册 图片验证码生成

    登录注册时,需要添加图片验证码校验防止恶意攻击.步骤如下: 1.后台生成图片验证码流,并记录code值到Session或Redis 中 2.请求过来后,附带图片验证码,从session或redis中获 ...

  3. python---post请求数据包,正常模拟登录,图片验证码未自动化,phtesseract

    python-post请求数据包 可以正常访问网页地址 http://192.168.40.239/binzcms1/index.php 用户登录成功的post请求数据包信息: 1.获取最新的验证码 ...

  4. JavaWeb项目实现图片验证码

    一.什么是图片验证码? 可以参考下面这张图: 我们在一些网站注册的时候,经常需要填写以上图片的信息. 这种图片验证方式是我们最常见的形式,它可以有效的防范恶意攻击者采用恶意工具,调用"动态验 ...

  5. 使用eclipse开发javaweb登录功能带验证码文件下载第几位登录使用servlet编写html

    这个代码在我的资源中我有上传.如果需要可以前往下载 https://download.csdn.net/download/qq_41946557/11622045 当然也可以留言分享与你,共同进步 具 ...

  6. 使用appfox工具测试登录有图片验证码接口的问题

    环境简介 服务器环境(运行在虚拟机之上): 环境 环境名称 操作系统 Win10 1905 专业版 数据库 sqlserver 2008R2 本机环境: 环境 环境名称 操作系统 win10 1905 ...

  7. selenium 模拟登录 突破图片验证码(豆瓣网)

    from selenium import webdriver import time import requests from lxml import etree import base64# 请求浏 ...

  8. JavaWeb实现成语图片验证码

    结构图如下: Java的action层下创建一个Servlet,名字:checkImg_Servlet package com.liaoyuanping.action;import java.awt. ...

  9. javaweb利用servlet与struts2实现可点击刷新的基础图片验证码

    javaweb利用servlet实现图片验证码 验证码是登录验证的技术,可以一定程度防止恶意脚本刷网站,造成服务器压力. 具体实现思想很简单: 首先利用servlet产生一个随机的验证码, 保存在se ...

  10. PHP登录带图片,PHP登录注册完整图片验证码实现

    通过上一篇 PHP gd简单画图学习后.这篇将继续探索实现PHP图片验证码的实现.效果图如下 为什么需要验证码? 验证码设计.验证码一使用于用户注册和登录.主要是防止机器批量注册用户或机器频繁测试登录 ...

最新文章

  1. 自动化运维—saltstack
  2. 不用任何数学方法,如何计算圆面积
  3. 计算机组成原理——数据表示、运算与校验1
  4. 数据结构课程设计(VS2012-c语言):算术表达式实现(加减乘除)
  5. 微服务API设计的实践与思考总结
  6. 这可能是我见过最详细的快速排序!
  7. 论坛用的两个函数:积分计算排名和楼层函数
  8. 从helloworld回顾程序的编译过程之三——静态链接
  9. Nginx @ Https
  10. java实现输入数字 输出金额_JAVA实现数字大写金额转换的方法
  11. 新浪云python开发_Python开发入门与实战17-新浪云部署
  12. Amazon ES现更名为Amazon OpenSearch Service并支持OpenSearch 1.0
  13. 《计算机网络》day01-网络的诞生和发展
  14. 自定义函数 | R语言偏相关分析及绘图
  15. matlab fisher检验,模式识别中Fisher分类器的Matlab实现及测试
  16. 计算机二级办公软件高级应用操作题,谁有计算机二级办公软件高级应用技术word操作题目啊?...
  17. pytorch 预测手写体数字_深度学习之PyTorch实战(3)——实战手写数字识别
  18. Linux Mint TLP设置
  19. linux如何修改用户的密码
  20. java 类继承命名_Java oop 代码7:A1,A2继承A且B1,B1继承B且A,B继承C的商品类,人物模型类两道题...

热门文章

  1. Java实战推箱子——菜鸟之路
  2. Generative Face Completion
  3. win7关闭UAC的方法
  4. C++使用Socks5协议进行代理上网(四)
  5. 基于matlab的微分例题,matlab程序设计常微分方程编程例题答案数学.doc
  6. 音视频转换常用基础术语全解
  7. 唯一标识 微信小程序_微信小程序中用户唯一ID的获取
  8. 调用webservice服务方式总结
  9. OpenWrt固件编译、软件包Ipk的编译详解
  10. 透过 Linux 内核看无锁编程