本文实现基于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. oracle默认用户名及密码

    oracle默认用户名及密码(网摘) (1)user:           internal           password   :oracle     (2)user:           s ...

  2. android6.0动态权限处理<一>

    android 6.0以上为了保护用户的隐私,和以往被人诟病的权限机制,确立了新的权限机制.从 Android 6.0(API 级别 23)开始,用户开始在应用运行时向其授予权限,而不是在应用安装时授 ...

  3. Java并发包基石-AQS详解

    目录 1 基本实现原理 1.1 如何使用 1.2 设计思想 2 自定义同步器 2.1 同步器代码实现 2.2 同步器代码测试 3 源码分析 3.1 Node结点 3.2 独占式 3.3 共享式 4 总 ...

  4. 小型 Web 页项目打包优化方案

    背景   目前团队中新的 Web 项目基本都采用了 Vue 或 React ,加上 RN,这些都属于比较重量级的框架,然而对于小型 Web 页面,又显得过大.早期的一些项目则使用了较原始的 HTML ...

  5. maven项目打包发布时跳过测试

    mvn命令: mvn clean install -Dmaven.test.skip=true eclipse build... 命令: clean install -Dmaven.test.skip ...

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

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

  7. SLAM中的优化理论(二)- 非线性最小二乘

    本篇博客为系列博客第二篇,主要介绍非线性最小二乘相关内容,线性最小二乘介绍请参见SLAM中的优化理论(一)-- 线性最小二乘.本篇博客期望通过下降法和信任区域法引出高斯牛顿和LM两种常用的非线性优化方 ...

  8. Keras Xception Multi loss 细粒度图像分类

    作者: 梦里茶 如果觉得我的工作对你有帮助,就点个star吧 关于 这是百度举办的一个关于狗的细粒度分类比赛,比赛链接: http://js.baidu.com/ 框架 Keras Tensorflo ...

  9. 【整理】01. jQuery.Form.js 用法分析

    前言: 为什么使用JQuery.From.js,因为原生<form>表单没有回调函数,不过可以通过jquery-form.js这个插件来实现回调函数. jQuery.form.js是一个f ...

  10. 关于在HTML中使用的script标签

    本文是<JavaScript高级程序设计>(第三版)中的第二章的个人学习的总结. 在HTML中使用JavaScript <script>标签 在HTML5中script主要有以 ...