验证码工具类
来源:互联网 发布:行知基地实践活动作文 编辑:程序博客网 时间:2024/06/13 06:14
验证码
验证码实现流程图:
验证码工具类:
package cn.itsource._02_randomcode;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.image.BufferedImage;import java.io.IOException;import java.util.Random;import java.util.UUID;import javax.imageio.ImageIO;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * 验证码工具类 * */ public class RandomCodeUtil {private RandomCodeUtil(){}/** * 判断用户输入的验证码与session中的是否一致 * codeName:表示session中存的验证码名称 * */public static Boolean equalsRandomCode(HttpServletRequest req,String codeName){String code = req.getParameter("code");String sessionCode = (String)req.getSession().getAttribute(codeName);//删除服务器中的session,删除了不占用内存req.getSession().removeAttribute(codeName);return code.equals(sessionCode);}/** * 生成验证码的方法 * */public static void createRandomCode(HttpServletRequest req, HttpServletResponse resp,String codeName)throws IOException{//生成随机数String randomCode = UUID.randomUUID().toString().substring(0, 5);//把随机数放进Session中req.getSession().setAttribute(codeName, randomCode);//创建图片对象int width = 100;int height = 40;int imageType = BufferedImage.TYPE_INT_RGB;BufferedImage image = new BufferedImage(width, height, imageType);//画板Graphics g = image.getGraphics();g.setColor(Color.WHITE);//绘制一个实心的矩形g.fillRect(1, 1, width - 2, height - 2);//把随机数画进图片中g.setColor(Color.BLACK);//设置随机数的颜色Font font = new Font("宋体", Font.BOLD + Font.ITALIC, 20);g.setFont(font);//设置随机数的字体和大小g.drawString(randomCode, 10, 28);//干扰线g.setColor(Color.GRAY);Random r = new Random();for (int i = 0; i < 100; i++) {g.fillRect(r.nextInt(width), r.nextInt(height), 2, 2);}//关闭g.dispose();//把图片对象以流的方式保存出去ImageIO.write(image, "jpg", resp.getOutputStream());}}
调用验证码工具类:
package cn.itsource._02_randomcode;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.image.BufferedImage;import java.io.IOException;import java.util.Random;import java.util.UUID;import javax.imageio.ImageIO;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;@WebServlet("/randomCode")public class RandomCodeServlet extends HttpServlet {private static final long serialVersionUID = 1L;protected void service(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {//调用验证码工具类RandomCodeUtil.createRandomCode(req, resp,"RANDOMCODE_IN_SESSION");}}
验证码的校验功能:
package cn.itsource._02_randomcode;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;@WebServlet("/login")public class LoginServlet extends HttpServlet{private static final long serialVersionUID = 1L;@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {req.setCharacterEncoding("UTF-8");/** * 1.从请求中拿到用户输入的验证码 * 2.从session中拿到真实的验证码 * 3.判断两个验证码是否相等 * 如果不相等(登录失败),返回登录页面 * 相等 正常执行代码 * *///String code = req.getParameter("code");//String sessionCode = (String)req.getSession().getAttribute("RANDOMCODE_IN_SESSION");////删除服务器中的session,删除了不占用内存//req.getSession().removeAttribute("RANDOMCODE_IN_SESSION");if(!RandomCodeUtil.equalsRandomCode(req,"RANDOMCODE_IN_SESSION")){//提示信息req.setAttribute("errorMsg", "您输入的验证码有误");req.getRequestDispatcher("/login.jsp").forward(req, resp);return;}System.out.println("正常执行代码");}}
login.jsp文件:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>登录</title><script type="text/javascript">//修改图片(修改之前需要先拿到这张图片)function changeImg(img){//console.debug(document.getElementById("myImg"));//如果请求相同,会找缓存中的数据,就不会重新发送 //每次请求产生不同的产生提交img.src = "/randomCode?code="+Math.random();}</script></head><body><span style="color:red;">${errorMsg}</span><form action="/login" method="post">姓名:<input type="text" name="username" /> <br />密码:<input type="password" name="password" /> <br />验证码:<input type="text" name="code" /> <img src="/randomCode" style="cursor:pointer;" title="点我替换.." onclick="changeImg(this)" /> <br /><input type="submit" value="登录" /></form></body></html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>登录</title><script type="text/javascript">//修改图片(修改之前需要先拿到这张图片)function changeImg(img){//console.debug(document.getElementById("myImg"));//如果请求相同,会找缓存中的数据,就不会重新发送 //每次请求产生不同的产生提交img.src = "/randomCode?code="+Math.random();}</script></head><body><span style="color:red;">${errorMsg}</span><form action="/login" method="post">姓名:<input type="text" name="username" /> <br />密码:<input type="password" name="password" /> <br />验证码:<input type="text" name="code" /> <img src="/randomCode" style="cursor:pointer;" title="点我替换.." onclick="changeImg(this)" /> <br /><input type="submit" value="登录" /></form></body></html>
阅读全文
0 0
- 验证码工具类
- 验证码工具类
- 验证码工具类
- 验证码工具类
- 验证码工具类
- PHP验证码工具类
- 验证码生成工具类
- 验证码生成工具类
- 验证码生成工具类
- java验证码 工具类
- 工具类创建验证码
- 生成验证码工具类
- php验证码工具类
- JAVA验证码工具类
- ASP 验证码工具类
- 自己封装的验证码工具类以及登录验证
- 图形验证码生成工具类
- Java验证码生成工具类
- pandas常用函数
- C++奇技淫巧(一):取位数,交换,比较,求均值
- 什么是IOC
- IAR 工程文件
- linux建立ssh、scp互信
- 验证码工具类
- 一个http请求的详细过程
- hdu 1754 I hate it 线段树维护最大值
- C语言实现继承和多态
- SQL 语句(四)--------------数据查询(嵌套查询)
- hadoop学习笔记--8.MapReduce案例一:简单好友推介实现
- const的用法总结
- React-Native|实现ListView下拉刷新加载更多
- 智能一代云平台(三十九):不同服务之间数据调用的一些思考