包括验证码的图片生成,服务器对验证码的对比确认。
一、生成验证码图片的服务器端Servlet
package servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.util.Random;
import javax.imageio.ImageIO;
public class PicCodeServlet extends HttpServlet {
// 验证码图片的宽度。
private int width=60;
// 验证码图片的高度。
private int height=20;
public PicCodeServlet() {
super();
}
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//在内存中创建力图象
BufferedImage buffImg=new BufferedImage(width,height,
BufferedImage.TYPE_INT_RGB);
//获取图形上下文
Graphics2D g=buffImg.createGraphics();
// 创建一个随机数生成器类。
Random random=new Random();
//设置背景色
g.setColor(Color.WHITE);
g.fillRect(0,0,width,height);
// 创建字体,字体的大小应该根据图片的高度来定。
Font font=new Font("Times New Roman",Font.PLAIN,18);
// 设置字体。
g.setFont(font);
// 画边框。
g.setColor(Color.BLACK);
g.drawRect(0,0,width-1,height-1);
// 随机产生160条干扰线,使图象中的认证码不易被其它程序探测到。
g.setColor(Color.pink);
for (int i=0;i<160;i++) {
int x = random.nextInt(width);
int y = random.nextInt(height);
int xl = random.nextInt(12);
int yl = random.nextInt(12);
g.drawLine(x,y,x+xl,y+yl);
}
// randomCode用于保存随机产生的验证码,以便用户登录后进行验证。
StringBuffer randomCode=new StringBuffer();
int red=0,green=0,blue=0;
// 随机产生4位数字的验证码。
for (int i=0;i<4;i++) {
// 得到随机产生的验证码数字。
String strRand=String.valueOf(random.nextInt(10));
// 产生随机的颜色分量来构造颜色值,这样输出的每位数字的颜色值都将不同。
red=random.nextInt(110);
green=random.nextInt(50);
blue=random.nextInt(50);
// 用随机产生的颜色将验证码绘制到图像中。
g.setColor(new Color(red,green,blue));
g.drawString(strRand,13*i+6,16);
// 将产生的四个随机数组合在一起。
randomCode.append(strRand);
}
// 将四位数字的验证码保存到Session中。
HttpSession session=request.getSession();
session.setAttribute("randomCode",randomCode.toString());
// request.setAttribute("randomCode",randomCode.toString());
// 禁止图像缓存。
response.setHeader("Pragma","no-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
response.setContentType("image/jpeg");
// 将图像输出到Servlet输出流中。
ServletOutputStream sos=response.getOutputStream();
ImageIO.write(buffImg, "jpeg",sos);
System.out.println("==========");
sos.close();
}
public void init() throws ServletException {
// Put your code here
}
}
------------------------
二、前台页面登录login.jsp中验证码的输入(原始页面在struts下自动生成)
<%@ page language="java" pageEncoding="utf-8"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
<%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html:html lang="true">
<head>
<html:base />
<title>login.jsp</title>
</head>
<body >
<center>
<h1>欢迎光临!!!!!</h1>
<table border="1"><tr><td>
<form action="servlet/DoLoginServlet" method="post">
用户名:<input type="text" id="username" /><br>
密 码:<input type="password" id="password"/><br>
验证码:<input type="text" name="validateCode" id="validateCode" size="5px" />
<img id="img" src="servlet/PicCodeServlet"/>
<input type="button" value="重新获取验证码" onclick=""/><br>
<input type="submit" value="登录" /><input type="reset" id="reset" value="重置"/>
</form>
</td></tr></table>
</center>
</body>
</html:html>
----------------------
三、服务器端对验证码的对比确认
package servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class DoLoginServlet extends HttpServlet {
public DoLoginServlet() {
super();
}
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String code = request.getParameter("validateCode");
System.out.println("inputCode ="+code);
System.out.println("sessionCode ="+request.getSession().getAttribute("randomCode"));
String randomCode = request.getSession().getAttribute("randomCode").toString();
//把前台输入的验证码与服务器生成的验证码对比
if(code.equals(randomCode)){
System.out.println("验证码正确");
}else{
System.out.println("验证错误,请重新输入!");
}
}
public void init() throws ServletException {
}
}
分享到:
相关推荐
在实际应用中,我们可以这样在ASP.NET的`.aspx`页面中使用这个验证码控件: ```asp ``` 运行时,这个控件会生成一个随机的图像,用户需要输入图像中显示的字符以完成验证。通常,我们还会在后端验证用户输入的...
在这个场景中,我们将讨论如何在.NET环境中创建验证码并将其集成到网页中。 首先,我们需要两个关键文件:一个ASP.NET网页(通常是.aspx文件)用于显示和生成验证码,以及一个后端处理代码(如.aspx.cs或.aspx.vb...
在提供的链接中,`yanzhengma.html`可能是示例代码,展示了一个简单的验证码生成页面。通过分析这个文件,我们可以学习到如何用JavaScript实现验证码功能,包括图像处理、动态生成和验证逻辑等。 学习这个话题,...
在这个项目中,"页面显示验证码"实现了验证码的生成和展示功能,但仅限于在网页上显示,没有包括验证用户输入的部分。 JSP(JavaServer Pages)是Java的一种动态网页技术,它允许开发者在HTML代码中嵌入Java代码,...
Bootstrap有自定义的验证码样式,在前端页面可以直接使用,他的css、js在使用前要在开头引入 上代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <!-- 告诉浏览器网页所...
本文将深入探讨"安卓验证码相关-随机图片验证码适合登录页面使用点击更换输入错误自动更换.rar"这个压缩包所包含的知识点。 首先,随机图片验证码是一种基于图像的验证方式,它的核心思想是生成一串随机字符,并将...
在移动端应用开发中,"移动端手机号注册登录+验证码页面+填写资料"是常见的用户认证流程,涉及到了前端技术栈中的JavaScript、jQuery、CSS以及HTML5和CSS3等关键元素。以下将详细介绍这些知识点: 1. **手机号登录*...
本文将深入探讨如何实现一个js短信验证码倒计时功能,同时确保在页面刷新后倒计时状态能够保持。 首先,我们需要理解验证码发送和倒计时的基本逻辑。当用户点击获取验证码按钮时,前端会向后端发送请求,请求发送...
在这个“注册页面用的验证码demo”中,我们可以推测它可能采用了一种现代且用户体验友好的验证码设计,例如基于JavaScript实现的动态图形验证码。这种验证码在生成时随机生成一组图像,并通过JavaScript控制显示在...
- 用户输入验证码:用户接收到验证码后输入,页面使用jQuery监听输入事件,提交时发送验证码至服务器进行验证。 - 验证结果反馈:服务器验证验证码是否匹配,通过JSP返回结果,页面根据结果显示成功或失败消息。 ...
在本主题中,我们将深入探讨如何使用JavaScript实现一个页面动态验证码。验证码的主要目的是防止自动化的机器人程序对网站进行恶意操作,例如批量注册、垃圾评论等。 验证码通常包括一些随机生成的字符或数字,用户...
在这个项目中,我们看到的"手机验证码h5页面附带验证"是一个适用于快速集成到现有项目中的H5页面模板,特别适合对前端开发不太熟悉的开发者,即“小白党”。通过简单的复制和粘贴,就可以将这个验证功能整合到你的...
在jsp登录页面生成验证码,并在登录的时候在后台进行验证码是否一致的比较。
- **AJAX**:为了让验证码在不刷新整个页面的情况下更新,我们可以使用AJAX(Asynchronous JavaScript and XML)。JavaScript库如jQuery提供了方便的API来发送异步请求到服务器获取新验证码,并更新页面上的验证码...
在H5注册页面,一般使用短信验证码,用户输入手机号后,系统向该号码发送一条包含验证码的短信。用户收到验证码后输入到页面上,系统再次验证。这一过程可以通过Ajax异步请求实现,提高用户体验。 ```javascript //...
接着,我们将这个canvas绘制的验证码作为一个Vue组件,这样可以在任何Vue应用中方便地引入和使用。组件的属性可能包括验证码的尺寸、颜色方案、字符数量等,可以通过配置这些属性来调整验证码的样式和难度。 在用户...
在实际部署中,开发者需要注意防刷机制,如验证码的刷新频率不宜过高,以免给正常用户带来不便,同时也可以加入验证码刷新的按钮,允许用户在看不清楚时刷新验证码。 最后,文件内容强调了layUI的验证码实现是使用...
在JSP页面上,通常会有一个专门的图片元素显示验证码。这个图片是由服务器动态生成的,包含一组随机的字符或数字,这些字符通常被扭曲、倾斜、加噪声,以便人类可以识别但机器难以解析。 在Java后台,验证码的生成...
通过使用`<iframe>`,我们可以实现验证码的动态更新,让用户在填写表单时可以无缝地获取新的验证码,而不会丢失已填写的信息。 `<iframe>`是HTML中的一个内联框架元素,它可以嵌入另一个HTML文档到当前文档中。在本...
简单验证码页面模板页面 JavaScript 实现简单的验证码