2025年验证码原理和实现

验证码原理和实现1 验证码的作用 验证码是目前大多网站所支持并使用于注册登录的 就在于其作用能有效防止暴力攻击 恶意登录注册 验证码每次都不同 这就可以排除 用其他病毒或者软件自动申请用户及自动登陆 有效防止这种问题 2 原理及知识点分析 1 原理 验证码于服务器端生成 发送给客户端 并以图像格式显示

大家好,我是讯享网,很高兴认识大家。

1、验证码的作用

验证码是目前大多网站所支持并使用于注册登录的。就在于其作用能有效防止暴力攻击、恶意登录注册,验证码每次都不同,

这就可以排除,用其他病毒或者软件自动申请用户及自动登陆.有效防止这种问题。


讯享网 

 

2、原理及知识点分析 

 1.原理

    验证码于服务器端生成,发送给客户端,并以图像格式显示。客户端提交所显示的验证码,客户端接收并进行比较,若比对失败则不能实现登录或注册,反之成功后跳转相应界面。

    2.主要知识

    服务器端的相关实现,前端运用 HTML 5,CSS 3 ,(可空白留给美工实现,须有  HTML  基础知识)。

    主要是三部分:

                           (提交界面, 成功及失败的)  jsp  

                           (后台对应提交  jsp  验证提交内容的) servlet  (生成验证码的) servlet

                           XML  文档

3、验证码实现 

前台代码:

<a style="cursor: hand" onclick="reload()"> <img alt="加载中..." src="${pageContext.request.contextPath }/CheckCodeServlet" id="img" border="1"> </a> 

讯享网

 

讯享网<script type="text/javascript"> function reload(){ document.getElementById("img").src = document.getElementById("img").src+"?aa="+new Date().getTime();//nocache } </script>

java代码:

package com.school.controller; import java.awt.Color; import java.awt.Graphics; import java.awt.Image; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.io.OutputStream; import java.util.Random; 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; import javafx.scene.text.Font; / *验证码 */ @WebServlet("/CheckCodeServlet") public class CheckCodeServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //设置缓存 response.setHeader("pragma", "No-cache"); response.setHeader("Cache-Control", "No-cache"); response.setDateHeader("Expires", 0); //设置返回数据的类型 response.setContentType("image/gif"); //设置画板大小 int width = 100; int height = 40; BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR); //画笔 Graphics g = image.getGraphics(); java.awt.Font font = new java.awt.Font("宋体",java.awt.Font.BOLD,25); g.setFont(font); String imagePath = request.getServletContext().getRealPath("/img/codeBackg.jpg"); Image image1 = ImageIO.read(new File(imagePath)); g.drawImage(image1,0,0,100,40,null); String source = "0abcdefghijklmABCDEFGH好人坏人"; String infor = ""; for (int i = 0; i < 4; i++) { //随机取一个字符 int index = new Random().nextInt(source.length()-1); char myCode = source.charAt(index); //让字的颜色随机 Random random = new Random(); g.setColor(new Color(20+random.nextInt(120),20+random.nextInt(120),20+random.nextInt(120))); //画入文字 g.drawString(myCode+"", 15+i*20, 20+new Random().nextInt(10)); //画入干扰线 g.drawLine(random.nextInt(100), random.nextInt(40), random.nextInt(100), random.nextInt(40)); infor += myCode; } //记录到session,以备将来匹配 request.getSession().setAttribute("infor", infor); //释放资源 g.dispose(); OutputStream out = response.getOutputStream(); ImageIO.write(image,"gif", out); out.flush(); out.close(); } / * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } } 
讯享网//接收输入的验证码 String code = request.getParameter("code"); //接收java生成的验证码 String infor = (String) request.getSession().getAttribute("infor"); //用equalsIgoreCase()方法判断是否相等,不区分大小写 if(!code.equalsIgnoreCase(infor)){ //不正确 loginError.put("code", "验证码不正确"); }

小讯
上一篇 2025-03-22 16:38
下一篇 2025-02-15 10:05

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/69356.html