JavaWeb 登录实现图片验证码
主要思路:
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 登录实现图片验证码相关推荐
- 登录功能图片验证码的实现
首先从网上下载一个生成验证码的Servlet: package com.train.controller;import java.awt.Color; import java.awt.Font; im ...
- 登录注册 图片验证码生成
登录注册时,需要添加图片验证码校验防止恶意攻击.步骤如下: 1.后台生成图片验证码流,并记录code值到Session或Redis 中 2.请求过来后,附带图片验证码,从session或redis中获 ...
- python---post请求数据包,正常模拟登录,图片验证码未自动化,phtesseract
python-post请求数据包 可以正常访问网页地址 http://192.168.40.239/binzcms1/index.php 用户登录成功的post请求数据包信息: 1.获取最新的验证码 ...
- JavaWeb项目实现图片验证码
一.什么是图片验证码? 可以参考下面这张图: 我们在一些网站注册的时候,经常需要填写以上图片的信息. 这种图片验证方式是我们最常见的形式,它可以有效的防范恶意攻击者采用恶意工具,调用"动态验 ...
- 使用eclipse开发javaweb登录功能带验证码文件下载第几位登录使用servlet编写html
这个代码在我的资源中我有上传.如果需要可以前往下载 https://download.csdn.net/download/qq_41946557/11622045 当然也可以留言分享与你,共同进步 具 ...
- 使用appfox工具测试登录有图片验证码接口的问题
环境简介 服务器环境(运行在虚拟机之上): 环境 环境名称 操作系统 Win10 1905 专业版 数据库 sqlserver 2008R2 本机环境: 环境 环境名称 操作系统 win10 1905 ...
- selenium 模拟登录 突破图片验证码(豆瓣网)
from selenium import webdriver import time import requests from lxml import etree import base64# 请求浏 ...
- JavaWeb实现成语图片验证码
结构图如下: Java的action层下创建一个Servlet,名字:checkImg_Servlet package com.liaoyuanping.action;import java.awt. ...
- javaweb利用servlet与struts2实现可点击刷新的基础图片验证码
javaweb利用servlet实现图片验证码 验证码是登录验证的技术,可以一定程度防止恶意脚本刷网站,造成服务器压力. 具体实现思想很简单: 首先利用servlet产生一个随机的验证码, 保存在se ...
- PHP登录带图片,PHP登录注册完整图片验证码实现
通过上一篇 PHP gd简单画图学习后.这篇将继续探索实现PHP图片验证码的实现.效果图如下 为什么需要验证码? 验证码设计.验证码一使用于用户注册和登录.主要是防止机器批量注册用户或机器频繁测试登录 ...
最新文章
- 自动化运维—saltstack
- 不用任何数学方法,如何计算圆面积
- 计算机组成原理——数据表示、运算与校验1
- 数据结构课程设计(VS2012-c语言):算术表达式实现(加减乘除)
- 微服务API设计的实践与思考总结
- 这可能是我见过最详细的快速排序!
- 论坛用的两个函数:积分计算排名和楼层函数
- 从helloworld回顾程序的编译过程之三——静态链接
- Nginx @ Https
- java实现输入数字 输出金额_JAVA实现数字大写金额转换的方法
- 新浪云python开发_Python开发入门与实战17-新浪云部署
- Amazon ES现更名为Amazon OpenSearch Service并支持OpenSearch 1.0
- 《计算机网络》day01-网络的诞生和发展
- 自定义函数 | R语言偏相关分析及绘图
- matlab fisher检验,模式识别中Fisher分类器的Matlab实现及测试
- 计算机二级办公软件高级应用操作题,谁有计算机二级办公软件高级应用技术word操作题目啊?...
- pytorch 预测手写体数字_深度学习之PyTorch实战(3)——实战手写数字识别
- Linux Mint TLP设置
- linux如何修改用户的密码
- java 类继承命名_Java oop 代码7:A1,A2继承A且B1,B1继承B且A,B继承C的商品类,人物模型类两道题...