`
yaolinnan
  • 浏览: 58594 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
文章分类
社区版块
存档分类
最新评论

网站验证码功能实现

 
阅读更多

网站登录经常会需要验证码,下面就是我实现的一个简单的验证码功能。

 

后台框架使用的是springMVC+spring+hibernate,前端页面使用的是html+freemarker。

 

1、验证码工具类

public class GetRandomCodeUtil {

	public static byte[] getImage(String code){
		int lengh=code.length();
		int fsize=15;//字体大小
		int fwidth=fsize+1;
		int width=fwidth*lengh+6;//图片宽度
		int height=fsize*2+1;//图片高度
		BufferedImage image=new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
		Graphics g=image.createGraphics();
		g.setColor(Color.WHITE);
		g.fillRect(0, 0, width, height);
		//设置边框颜色
		g.setColor(Color.LIGHT_GRAY);
		//边框字体样式
		g.setFont(new Font("Arial", Font.BOLD, height - 2));
		//绘制边框
		g.drawRect(0, 0, width - 1, height -1);
		//绘制噪点
		Random rand = new Random();
		//设置噪点颜色
		g.setColor(Color.LIGHT_GRAY);
		for(int i = 0;i < lengh * 6;i++){
		int x = rand.nextInt(width);
		int y = rand.nextInt(height);
		//绘制1*1大小的矩形
		g.drawRect(x, y, 1, 1);
		}
		//绘制验证码
		int codeY = height - 10;  
		//设置字体颜色和样式
		g.setColor(new Color(19,148,246));
		g.setFont(new Font("Georgia", Font.BOLD, fsize));
		for(int i = 0; i < lengh;i++){
			g.drawString(String.valueOf(code.charAt(i)), i * 16 + 5, codeY);
		}
		//关闭资源
		g.dispose();
		ByteArrayOutputStream bos = new ByteArrayOutputStream();
		JPEGImageEncoder jpeg = JPEGCodec.createJPEGEncoder(bos);
		byte[] bts=null;
		try {
		     jpeg.encode(image);
             bts = bos.toByteArray();
	         } catch (ImageFormatException e) {
	             e.printStackTrace();
	         } catch (IOException e) {
	             e.printStackTrace();
	         }
		return bts;
	}
	
	public static String GetCode(int length){
	    char[] codes={'0','1','2','3','4','5','6','7','8','9',
				'a','b','c','d','e','f','g','h','i',
				 'j','k','l','m','n','o','p','q','r','s','t',
				 'u','v','w','x','y','z','A','B','C',
				 'D','E','F','G','H','I','J','K','L',
				 'M','N','O','P','Q','R','S','T','U','V',
				 'W','X','Y','Z'};
		int n=codes.length;
		char[] result=new char[length];
		for(int i=0;i<result.length;i++){
			int r=(int) (Math.random()*n);
			result[i]=codes[r];
		}
		return String.valueOf(result);
	}
}

 说明:主要通过java.awt包和Java随机数来实现将随机生成的验证码变成一个图片,工具类中可以自定义验证码数据库(见codes数组)。

 

二、控制层(cotroller)代码

@Controller("loginControl")
public class LoginControl {

@RequestMapping(value={"/code"},method=RequestMethod.GET)
	public void code(HttpServletRequest req,HttpServletResponse res) throws IOException{
		String imageCode=GetRandomCodeUtil.GetCode(4);
		byte[] b=GetRandomCodeUtil.getImage(imageCode);
		req.getSession().setAttribute("code", imageCode);
		req.getSession().setMaxInactiveInterval(60000);
		res.setContentType("image/jpeg");
		res.setBufferSize(2048);
		res.getOutputStream().write(b);
	}
}

 

说明:调用工具类生成随机验证码,并存入session中,之后将验证码图片返回给前端页面。

 

 

三、前端页面代码(部分代码)

<#assign WEB_PATH = request.getContextPath()>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
	<head>
		<title>登录</title>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
		<link rel="stylesheet" href="${WEB_PATH}/css/login.css" type="text/css" charset="utf-8"/>
		<script src="${WEB_PATH}/js/jquery.js" type="text/javascript"></script>
	</head>
	<body style="background:#3e6dbb;">
		<div class="loginCon">
			<div class="login">
				<img src="${WEB_PATH}/images/loginLogo.png" alt="" width="701" height="125" />
				<div class="area">
				<form method="post" onkeyup="keyUp(event)">
					<!--  
					<p>
						<label><input type="radio" name="userType" id="normal" value="0" checked="checked"/>超级管理员</label>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
						<label><input type="radio" name="userType" id="enterprise" value="1"/>业务管理员</label>
					</p>
					-->	
					<p>
						<label><input type="hidden" name="userType" id="normal" value="0" /></label>
					</p>
					<p>用户名:<input type="text" name="name" id="name" class="inputW" /></p>
					<p>密 码:<input type="password" name="password" id="pwd" class="inputW" /></p>
					<p>验证码:<input type="text" name="code" id="code" class="inputW" />
					<img alt="看不清 换一张" src="${WEB_PATH}/code" onclick="refresh()" id="image"></img></p>
					<p class="pBtn"><input type="button" value="&nbsp;" class="inputBtn" onclick="login()"/></p>
				</form>
				</div>
			</div>
		</div>
<script>

	function refresh(){
		$("#image").attr("src","${WEB_PATH}/code?timestamp="+new Date().getTime());
	}
</script>
	</body>
</html>

 

 

精彩科技工作室
分享到:
评论

相关推荐

    asp.net实现验证码功能

    总之,ASP.NET结合C#和System.Drawing能方便地实现验证码功能,有效地保护了网站免受自动化的恶意攻击。在实际开发中,还可以根据需要添加更多安全特性,比如时间限制、滑动验证码、声音验证码等,进一步提高系统的...

    基于Servlet下的验证码功能的实现

    在网站开发中,验证码无疑是必不可缺的一项功能。这个是简易验证码的实现Demo。

    ASP.NET MVC实现网站验证码功能

    在这个场景中,我们将讨论如何在ASP.NET MVC中实现图片验证码功能,这是一种常见的安全措施,用于防止自动化的机器人或恶意脚本对网站进行非法操作。 验证码的主要目的是验证用户是否为人类,而不是计算机程序。在...

    实现验证码功能

    ### 实现验证码功能 在现代网站与应用中,验证码(CAPTCHA)被广泛用于区分真实用户与自动程序,以防止恶意登录、注册等行为。本文将详细介绍如何在Web应用程序中实现验证码功能,包括其基本原理、实现步骤以及一个...

    JAVA实现网站验证码功能demo(servlet)

    本篇文章将详细讲解如何使用Java的Servlet技术来实现一个简单的网站验证码功能。 首先,我们需要理解Servlet。Servlet是Java提供的一种服务器端编程接口,用于扩展Web服务器的功能。它能够接收HTTP请求并生成HTTP...

    使用Vue 实现滑动验证码功能

    本文将详细介绍如何使用Vue框架来实现滑动验证码功能,为读者提供一个实现前端校验验证码的实例。 首先,我们要了解验证码的基本原理。验证码分为前后端校验两个阶段。前端校验主要防止自动化程序(机器人)进行...

    Java使用SSM框架实现登录页面的验证码功能

    ### Java使用SSM框架实现登录页面的验证码功能 在现代Web开发中,为了增强网站的安全性,防止自动化脚本攻击,通常会在用户登录时加入验证码功能。本文将详细介绍如何使用SSM(Spring、SpringMVC、MyBatis)框架来...

    ASP.NET动态验证码

    ASP.NET动态验证码是一种用于验证用户身份的安全机制,广泛应用于网页...通过合理的设计和实现,动态验证码可以有效提升网站的安全性,阻止自动化攻击。同时,根据实际需求调整验证码的难度和外观,以兼顾用户体验。

    asp.net mvc验证码实现

    ASP.NET MVC是一个强大的...通过以上步骤,我们可以实现一个基本的ASP.NET MVC验证码功能。然而,实际开发中还可能需要考虑其他因素,如性能优化、多语言支持、无障碍访问等。在实践中不断优化和完善,以满足项目需求。

    实现验证码功能的登陆界面.rar

    本项目“实现验证码功能的登陆界面”是基于Java技术,利用Servlet实现的一个简单的验证码登录界面,旨在帮助学习者理解验证码的工作原理和实现方法。 验证码的主要目的是增加一个验证步骤,确保用户是真实的、有...

    winform窗体实现验证码功能

    在这个场景中,我们探讨的主题是如何在Winform应用中实现验证码功能。验证码的主要目的是为了防止恶意自动化程序(如机器人)对网站或应用程序进行非法操作,通常通过让用户输入图片上显示的一串随机字符来验证其为...

    JSP代码实现验证码功能

    ### JSP代码实现验证码功能详解 #### 一、概述 本文档详细介绍了如何使用Java Server Pages (JSP)技术来实现一个简单的验证码功能。验证码在Web应用中是一种常见的安全措施,用于防止自动化软件进行恶意操作,如...

    广告验证码的实现

    需要注意的是,广告验证码的实现要求安装者必须彻底关闭原有的验证码功能,而不是简单地删除验证码源码。这是因为如果原系统自带的验证码功能没有被彻底关闭,它可能会与新的验证码广告系统产生冲突,从而导致验证码...

    JSP实现验证码功能.zip

    本项目"JSP实现验证码功能"正是关注于如何在JSP中集成验证码功能,以提高网站的安全性。 验证码的基本原理是生成一段随机的、难以被机器识别的文字或图像,用户在访问某些关键页面时需要输入显示的验证码,系统会...

    Web 开发实现验证码输入功能

    在这个主题中,我们将深入探讨如何实现Web开发中的验证码功能。 首先,验证码的类型主要有图形验证码、音频验证码、滑动验证码以及行为式验证码等。最常见的可能就是图形验证码,它通常由一串随机字符组成,显示在...

    JS实现获取短信验证码功能(前台代码)

    以上就是一个基本的使用JavaScript和jQuery实现的获取短信验证码功能的示例。在实际项目中,你还需要考虑错误处理、接口调用的安全性、用户界面反馈以及更多的用户体验优化。确保与后端服务的通信安全可靠,是实现这...

    Java实现验证码验证功能

    在IT行业中,验证码验证功能是网站和应用程序安全的重要组成部分,它可以防止恶意自动化脚本或机器人进行非法操作。本文将深入探讨如何使用Java编程语言来实现验证码验证,主要涉及Servlet、session以及画板对象等...

    仿支付宝滑块验证码前端实现

    本实例将详细探讨如何在前端实现仿支付宝风格的滑块验证码功能。 首先,我们需要理解滑块验证码的基本工作原理。它通常包括两部分:一个固定的背景图像,上面有一个可移动的滑块。用户需要通过拖动滑块,使得滑块...

    VB6.0实现网站验证码下载完整代码

    标题中的“VB6.0实现网站验证码下载完整代码”指的是使用Visual Basic 6.0编程环境,编写了一段能够从网站上抓取并保存验证码图片的完整程序。这个过程涉及到了网络请求、图像处理和文件操作等多个技术点。 首先,...

Global site tag (gtag.js) - Google Analytics