网站登录经常会需要验证码,下面就是我实现的一个简单的验证码功能。
后台框架使用的是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> <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=" " 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>
精彩科技工作室
相关推荐
在网站开发中,验证码无疑是必不可缺的一项功能。这个是简易验证码的实现Demo。
ASP.NET MVC实现网站图片验证码功能,有源代码,与案例文档
本资源提供的是一个django框架下的网站验证码技术,通过python代码调用PIL库生成图形验证码然后通过json方式将验证码字段...做到了生成,点击更换,校验等基本功能,基本满足网站验证码要求.实现简单,适合初学者参考。
有个小demo可以看。用到servlet来实现。
本插件可以快速实现网站验证码功能,包括验证码的生成和验证。 2.所需参数: CaptchaTool类包括两个方法,generate方法可以实现生成'ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'中的四位字符,并将这些字符写道...
教你如何实现网站中的验证码功能 非常简单
用python实现登录网站验证码功能: 设计两种验证码: 1 图形验证码,用python web框架Django能够实现动态刷新。 2 滑动验证码: 1.服务端随机生成小拼块和带有抠图缺口的背景图片,并保存随机抠图位置坐标; 2.前端...
本文主要介绍了使用php实现网站验证码功能的方法。具有很好的参考价值,下面跟着小编一起来看下吧
主要为大家详细介绍了Django自定义插件实现网站登录验证码功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
1、可以集中管理网站中的多种验证码 2、通过扩展可以实现动态切换验证码 3、可自行开发验证码,然后加入到系统中,而不用修改原有系统代码,减少依赖,降低耦合 4、只要实现验证码组件的一个约定接口,就可以将...
有效防止这种问题对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试,实际上是用验证码是现在很多网站通行的方式(比如招商银行的网上个人银行...虽然登陆麻烦一点,但是对社区还来说这个功能还是...
python实现邮箱登录、邮箱验证码注册、找回密码等功能
完整文档,实现JDBC和HIBERNATE,适用于毕业答辩等,请勿商业
用python实现登录网站验证码功能: 设计两种验证码: 1 图形验证码,用python web框架Django能够实现动态刷新。 2 滑动验证码: 1.服务端随机生成小拼块和带有抠图缺口的背景图片,并保存随机抠图位置坐标; 2.前端...
源码功能都是经过老师肯定的,都能满足要求,有需要放心下载即可。源码是经过本地编译可运行的,下载完成之后配置相应环境即可使用。源码功能都是经过老师肯定的,都能满足要求,有需要放心下载即可。源码是经过本地...
Python毕业设计 基于TensorFlow+Django深度网络的网站验证码识别系统的设计与实现+详细文档+全部资料.zipPython毕业设计 基于TensorFlow+Django深度网络的网站验证码识别系统的设计与实现+详细文档+全部资料....
短信验证功能在各个网站应用都非常广泛,那么在springmvc中如何实现短信验证码功能呢?今天小编抽时间给大家介绍下Spring MVC 中 短信验证码功能的实现方法,一起看看吧
验证码是目前互联网上非常常见也是非常重要的一个事物,充当着很多系统的防火墙功能,但是随时OCR技术的发展,验证码暴露出来的安全问题也越来越严峻。本文介绍了一套字符验证码识别的完整流程,对于验证码安全和OCR...
极验验证码:第三方收费拖动验证码,斗鱼,熊猫直播等很多网站都使用了这家的验证码。 这种通过第三方来实现的方式对一个程序来说,总觉得很不好。于是我就想做用php+js来做一个同样的功能,名字就叫tncode吧,39...