Java代码生成图片验证码
1.jsp页面显示验证码,src跳转到Controller里的:getImg_validate,reloadImg()作用是点击验证码就会换一张(重新请求getImg_validate)
<ul>
<li >验证码: </li>
<li >
<img id="img_validate" src="<%=basePath%>image/getImg_validate" onclick="reloadImg()">
<input type="text" name="yanzhengma" id="yanzhengma" placeholder="请输入验证码"/>
</li>
</ul> <script type="text/javascript"> function reloadImg() { document.getElementById("img_validate").src="<%=basePath%>image/getImg_validate";
} </script>

2.写一个ImageUtil工具类,在里面可以自定义图片生成的大小,字体大小,背景色,验证码个数,干扰线条条数等等
package com.svse.house.util; import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.util.Random; public class ImageUtil { //1.定义变量保存生成后的验证码字符串
static String code = ""; //2.生成验证码
public static String createcode() {
code = "";
String a = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";//随机生成的字符范围(0-9,a-z,A-Z) //生成验证码的位数(这里是4位)
for (int i = 0; i < 4; i++) {
int index = (int) (Math.random() * 62);//会产生一个[0,62)的数,不包含小数
char b = a.charAt(index);
code = code + b;
}
return code;
} //查看已经生成的验证码
public static String getCode() {
return code;
} //3.生成图片
public static BufferedImage createimage() {
// 前2个参数为:width, height.后面是图像类型
//创建一个不带透明色的BufferedImage对象,TYPE_INT_ARGB为带透明色
BufferedImage bi = new BufferedImage(130,50, BufferedImage.TYPE_INT_RGB); //1.得到一个画布
Graphics g = bi.getGraphics();
//2.添加背景颜色
g.setColor(Color.WHITE);
g.fillRect(0, 0, 130, 50); //3.添加干扰线
for (int i = 0; i < 10; i++) {
Random r = new Random();
int red = r.nextInt(256);
int green = r.nextInt(256);
int blue = r.nextInt(256);
Color c = new Color(red, green, blue);
g.setColor(c);
int x1 = r.nextInt(131);
int y1 = r.nextInt(51);
int x2 = r.nextInt(131);
int y2 = r.nextInt(51);
g.drawLine(x1,y1,x2,y2);//画线
//g.drawOval(x1, y1, x2, y2);//画曲线
} //3.添加文字
g.setColor(Color.BLACK);
g.setFont(new Font("宋体", Font.BOLD, 50)); String str = getCode();
//4.将文字填充到画板中
g.drawString(str, 15, 40); //5.关闭画布
g.dispose();
return bi;
} }
3.在controller层调用getImg_validate,试用过jpeg和bmp格式的setContentType,都可以
package com.svse.house.controller; import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException; import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping; import com.svse.house.util.ImageUtil; @Controller
@RequestMapping("/image")
public class ImageController {
@RequestMapping("/getImg_validate")
public void yanzheng(HttpServletResponse response){
try {
ImageUtil.createcode();
BufferedImage image = ImageUtil.createimage();
//以流的方式返回给客户端
response.setContentType("image/jpeg");
//response.setContentType("image/bmp");
ByteArrayOutputStream bt = new ByteArrayOutputStream();
//将图片转换成字节流
ImageIO.write(image,"jpeg",bt);
//ImageIO.write(image,"bmp",bt);
//得到输出流,返回客户端
ServletOutputStream outputStream = response.getOutputStream();
outputStream.write(bt.toByteArray());
} catch (IOException e) {
e.printStackTrace();
}
}
}

4.最后的验证
当时一直想在前台获取随机生成的四位数验证码来和自己输入的进行比较,可以通过session来获取但如果刷新验证码session里的值不会改变除非刷新整个页面。
后来想想真傻,直接在后台比较不就好了吗。
Java代码生成图片验证码的更多相关文章
- 用Java实现生成图片验证码
通过代码实现生成一个随机验证码图片,且生成后自动打开: package day_12_17; import javax.imageio.ImageIO; import java.awt.*; impo ...
- java的动态验证码单线设计
1.java的动态验证码我这里将介绍两种方法: 一:根据java本身提供的一种验证码的写法,这种呢只限于大家了解就可以了,因为java自带的模式编写的在实际开发中是没有意义的,所以只供学习一下就可以了 ...
- SpringBoot使用谷歌方式生成图片验证码
1.新建一个springboot的项目 2.导入坐标 <dependency> <groupId>com.github.penggle</groupId> < ...
- PHP生成图片验证码demo【OOP面向对象版本】
下面是我今天下午用PHP写的一个生成图片验证码demo,仅供参考. 这个demo总共分为4个文件,具体代码如下: 1.code.html中的代码: <!doctype html> < ...
- Myeclipse中把java代码导成UML类图
Myeclipse中把java代码导成UML类图 1.右键点击项目名称,选择New-------àUML2 Model 2.给类图命名 3.导成类图 1)如果要把整个项目导成类图,则把整个项目拖到类图 ...
- Java中使用验证码和二维码
资源 需要: jelly-core-1.7.0.GA.jar 网站: http://lychie.github.io/products.html 将下载下来的 jelly-core-1.7.0 ...
- java实现随机验证码的图片
链接地址:http://blog.sina.com.cn/s/blog_407a68fc010006qo.html 1.一共需要2个常用java文件(RandomCode.java和RandomCod ...
- 用java来实现验证码功能(本帖为转载贴),作为个人学习收藏用
一.关于为何使用验证的解释 在目前的网页的登录.注册中经常会见到各种验证码.其目的便是为了:防止暴力破解 .因为只要CPU性能较强,便可以在慢慢尝试密码的过程中来破解用户账号,因而导致的结果是用户信 ...
- Java web开发,在一个jsp里放太多java代码的后果,摘自 java web轻量级开发面试教程
现要做一个简单的登录页面,如果用户通过验证,会显示Welcome用户名的欢迎词,反之则返回登录页面让用户再次输入 这部分的完整代码是JSPDemo项目里的login.jsp,下面来分析一下关键代码. ...
随机推荐
- “全栈2019”Java第一百一十二章:什么是闭包?
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- git 使用merge 对本地分支进行合并 并进行代码提交的流程
1.只有当将修改内容commit后 该修改才完全生效,进行merge前需要将两个分支修改的内容都进行commit 2.假设本地两个分支 用于开发的分支:dev 用于同步远程仓库的分支:mas ...
- 2018 ACM-ICPC 亚洲区域赛北京现场赛 I题 Palindromes
做法:打表找规律 大数是过不了这个题的(但可以用来打表) 先找k的前缀,前缀对应边缘数字是哪个 如果第0位是2-9 对应奇数长度的1-8 第0位为1时,第1位为0时对应奇数长度的9,为1-9时对应偶数 ...
- 3XX重定向
3XX响应结果表明浏览器需要执行某些特殊的处理以正确处理请求 301 Moved Permanently 永久性重定向 该状态码表示请求的资源已经被分配了新的URI,以后应使用资源现 ...
- Java 设计模式——单例模式
Java有很多的设计模式,但是让我们一个个分析出来,可能就一脸蒙逼了,今天就和大家一块来分析一下Java中的一些常用的设计模式.今天先分析单例模式 单例模式的好处 举个例子:有一个类,里面有若干个公共 ...
- $.ajax()——超时设置,增加 loading 提升体验
前端发送Ajax请求到服务器,服务器返回数据这一过程,因原因不同耗时长短也有差别,且这段时间内页面显示空白.如何优化这段时间内的交互体验,以及长时间内服务器仍未返回数据这一问题,是我们开发中不容忽视的 ...
- L05-Linux部署msmtp+mutt发送邮件
一.前言 首先,得明白发送一封邮件的流程,下面一段理论摘抄自廖雪峰的官网网站https://www.liaoxuefeng.com/article/00137387674890099a71c04005 ...
- 浅谈mongodb与Python的交互
1. mongdb和python交互的模块 pymongo 提供了mongdb和python交互的所有方法 安装方式: pip install pymongo 2. 使用pymongo 导入pymon ...
- Go语言容器
Map 是一种无序的键值对的集合.Map 最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值. Map 是一种集合,所以我们可以像迭代数组和切片那样迭代它.不过,Map 是无 ...
- DA14580_583_DK_II开发板入门笔记
本文链接:http://www.cnblogs.com/obarong/p/8521893.html 1.介绍 开发板资料 参考文件: DA1458XDK蓝牙开发板用户须知1.3.pdf DA1458 ...