本文实现基于spring mvc的图片验证码,分后台代码和前端页面的展现以及验证码的验证。

首看后台实现代码:

@RequestMapping({"authCode"})

public void getAuthCode(HttpServletRequest request, HttpServletResponse response,HttpSession session)
throws IOException {

int width = 63;

int height = 37;

Random random = new Random();

//设置response头信息

//禁止缓存

response.setHeader("Pragma", "No-cache");

response.setHeader("Cache-Control", "no-cache");

response.setDateHeader("Expires", 0);

//生成缓冲区image类

BufferedImage image = new BufferedImage(width, height, 1);

//产生image类的Graphics用于绘制操作

Graphics g = image.getGraphics();

//Graphics类的样式

g.setColor(this.getRandColor(200, 250));

g.setFont(new Font("Times New Roman",0,28));

g.fillRect(0, 0, width, height);

//绘制干扰线

for(int i=0;i<40;i++){

g.setColor(this.getRandColor(130, 200));

int x = random.nextInt(width);

int y = random.nextInt(height);

int x1 = random.nextInt(12);

int y1 = random.nextInt(12);

g.drawLine(x, y, x + x1, y + y1);

}

//绘制字符

String strCode = "";

for(int i=0;i<4;i++){

String rand = String.valueOf(random.nextInt(10));

strCode = strCode + rand;

g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));

g.drawString(rand, 13*i+6, 28);

}

//将字符保存到session中用于前端的验证

session.setAttribute("strCode", strCode);

g.dispose();

ImageIO.write(image, "JPEG", response.getOutputStream());

response.getOutputStream().flush();

}

创建生成颜色的方法

//创建颜色

Color getRandColor(int fc,int bc){

Random random = new Random();

if(fc>255)

fc = 255;

if(bc>255)

bc = 255;

int r = fc + random.nextInt(bc - fc);

int g = fc + random.nextInt(bc - fc);

int b = fc + random.nextInt(bc - fc);

return new Color(r,g,b);

}

前端代码

<form action="toLogin.do" id="loginUser" method="post">

<div class="form-group">

姓名:<input id="name" name="name" type="text"/>

</div>

<div class="form-group">

密码:<input id="password" name="password" type="password"/>

</div>

<div class="form-group">

验证码:<input id="authCode" name="authCode" type="text"/>

<!--这里img标签的src属性的值为后台实现图片验证码方法的请求地址-->

<label><img type="image" src="authCode.do" id="codeImage" onclick="chageCode()" title="图片看不清?点击重新得到验证码" style="cursor:pointer;"/></label>

<label><a onclick="chageCode()">换一张</a></label>

</div>

<input type="button" class="btn btn-default" onclick="subm()" value="登录"/>

</form>

实现点击图片更换验证码的js方法

    function chageCode(){

$('#codeImage').attr('src','authCode.do?abc='+Math.random());//链接后添加Math.random,确保每次产生新的验证码,避免缓存问题。

}

提交时的表单验证代码

页面加载时行成表单验证对象

$("#loginUser").validate({

rules:{

name:{ required:true},

password:{required:true},

authCode:{required:true,checkCode:true}

},

messages:{

name:{required:"姓名不能为空"},

password:{required:"密码不能为空"},

authCode:{required:"验证码不能为空"}

}

});

然后添加自定义的验证码验证方法

jQuery.validator.addMethod("checkCode", function(value, element) {

var strCode = ${strCode!""};//这里用的freemarke取到后台保存在session中的验证码字符。

var inpCode = $('#authCode').val();

if(strCode==""||strCode == null){

chageCode();

//用后台的字符与页面输入的验证码进行比较

}else if(inpCode == strCode){

return true;

}else{

return false;

}

}, "验证码不正确");

效果图

进行表单验证效果图



基于spring mvc的图片验证码实现的更多相关文章

  1. 基于Spring MVC的Web应用开发(三) - Resources

    基于Spring MVC的Web应用开发(3) - Resources 上一篇介绍了在基于Spring MVC的Web项目中加入日志,本文介绍Spring MVC如何处理资源文件. 注意到本项目的we ...

  2. 基于Spring MVC 实现拦截器

    Spring MVC 拦截器 一,具体内容: 在所有的开发之中拦截器属于一个重要的组件,可以说几乎所有的项目都会提供的概念应用,不管是Spring MVC,还是Struts 2.x都是提供有拦截器的, ...

  3. MVC之图片验证码

    MVC之图片验证码 controller中的action方法public ActionResult GetValidateCode() { ValidateCode vCode = new Valid ...

  4. Spring MVC第一课:用IDEA构建一个基于Spring MVC, Hibernate, My SQL的Maven项目

    作为一个Spring MVC新手最基本的功夫就是学会如何使用开发工具创建一个完整的Spring MVC项目,本文站在一个新手的角度讲述如何一步一步创建一个基于Spring MVC, Hibernate ...

  5. spring mvc生成注册验证码

    通过Spring MVC为系统添加验证码 1:布局登陆页面,用户名,密码,填写验证码的文本框,及验证码的图片及点击换图 <%@ taglib prefix="c" uri=& ...

  6. 基于Spring Mvc实现的Excel文件上传下载

    最近工作遇到一个需求,需要下载excel模板,编辑后上传解析存储到数据库.因此为了更好的理解公司框架,我就自己先用spring mvc实现了一个样例. 基础框架 之前曾经介绍过一个最简单的spring ...

  7. 基于Spring Boot的图片上传

    package com.clou.inteface.domain.web.user; import java.io.File; import java.io.IOException; import j ...

  8. 如何开始创建第一个基于Spring MVC的Controller

    万事开头难,良好的开端是成功的一半! 以下示例怎么开始创建我们的第一个Spring MVC控制器Controller 1.新建一个java类,命名为:MyFirstController,包含以下代码, ...

  9. 基于spring mvc的注解DEMO完整例子

    弃用了struts,用spring mvc框架做了几个项目,感觉都不错,而且使用了注解方式,可以省掉一大堆配置文件.本文主要介绍使用注解方式配置的spring mvc,之前写的spring3.0 mv ...

随机推荐

  1. springmvc 前端 发ajax请求的几种方式

    一.传json单值或对象 1.前端 var data = {'id':id,'name':name}; $.ajax({ type:"POST", url:"user/s ...

  2. Android-Bluetooth Low Energy(BLE)

    Android Bluetooth Low Energy Android 低功耗蓝牙简介 2016-4-18 Android4.3(API 18)介绍了平台支持的低功耗蓝牙,app可用于发现设备,检索 ...

  3. 第一课 1) 控制div属性 总结

    点击按钮变换属性: <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  4. 设计模式的征途—14.职责链(Chain of Responsibility)模式

    相信大家都玩过类似于“斗地主”的纸牌游戏,某人出牌给他的下家,下家看看手中的牌,如果要不起,则将出牌请求转发给他的下家,其下家再进行判断.一个循环下来,如果其他人都要不起该牌,则最初的出牌者可以打出新 ...

  5. Ajax获取服务器信息

    xhr.onreadystatechange = function(){ if (xhr.readyState == 4){ if ((xhr.status >= 200 && ...

  6. 工具 | 代码调试利器fiddle介绍

    我们开发的系统运行在用户的环境上,为了保护我们的代码和提升性能,前端javascript是经过压缩的.压缩的代码难于定位,当前只有chrome对压缩的代码支持格式化,但是变量和函数简化后,定位依然困难 ...

  7. Oracle 11g RAC 修改各类IP地址

    Oracle 11g RAC 修改各类IP地址 首先,我们都知道Oracle 11g RAC中的IP主要有:Public IP.VIP.SCAN VIP.Private IP这几种. 一般这类改IP地 ...

  8. ABP+AdminLTE+Bootstrap Table权限管理系统第八节--ABP错误机制及AbpSession相关

    上一节我们讲到登录逻辑,我做的登录逻辑很简单的,我们来看一下abp module-zero里面的登录代码. #region Login / Logout public ActionResult Log ...

  9. jQuery相关知识总结一

    1day-jquery 1. 1 jQuery 1概念 * JavaScript(ECMA/DOM/BOM)在实际开发中,使用比较麻烦,有浏览器兼容问题. * JavaScript类库(JS库) 的目 ...

  10. CgLib动态代理学习【Spring AOP基础之一】

    如果不了解JDK中proxy动态代理机制的可以先查看上篇文章的内容:Java动态代理学习[Spring AOP基础之一] 由于Java动态代理Proxy.newProxyInstance()的时候会发 ...