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,下面来分析一下关键代码. ...
随机推荐
- Spring中 使用注解+c3p0+事物 《模拟银行转账》
使用注解的方式 模拟转账 要么都成功 要么都失败 !保持一致性! 准备工作: jar包: 需要的类: UserDao: package com.hxzy.spring.c3p0.Dao ...
- nosql基本了解
数据库分为关系型数据库和非关系型数据库nosql,关系型数据库比较常见,此处不再多讲:nosql有key-value存储数据库,比如redis:文档型数据库,比如mongodb:列存储数据库,比如hb ...
- lucene3.0_IndexSearcher排序
系列汇总: lucene3.0_基础使用及注意事项汇总 IndexSearcher排序 本文主要讲解: 1.IndexSearcher中和排序相关的方法及sort类.SortField类(api级别) ...
- [真题] 一道 vsftp 运维题
一道 vsftp 运维题 一.前言 在 V 站上凑巧看到了好友发的求助帖,五天时间一个理他的都没有.哈哈哈~ 废话不多说,我们来试试. 二.题目 这里我们假设存在这样的场景: 网络内有普通用户 ade ...
- YC全球总裁:我招揽陆奇好多年,如今终于如愿了!
简评:YC 老大多年来一直在努力招揽陆奇,终于如愿了. YC 总裁 Sam Altman 在 8 月 14 日,发布了关于陆奇以及 YC 中国的公告,全文如下: 我非常荣幸地宣布,陆奇加入 YC 并且 ...
- git简易入门(github)
本文讲解下git的使用,包括使用git上传项目工程到github,以及错误解决. 1.安装git 使用apt-get安 sudo apt-get update sudo apt-get install ...
- spark持久化
spark持久化:cache .persist.checkpoint 一.cache持久化 cache实际上是persist的一种简化方式,是一种懒执行的,执行action类算子才会触发,cahce后 ...
- Flask中的before_request装饰器和after_request装饰器以及WTForms组件
一.before_request装饰器和after_request装饰器 我们现在有一个Flask程序其中有3个路由和视图函数 from flask import Flask app = Flask( ...
- Service层异常处理
1.在service方法里面如果对异常进行了捕获的话,该事务是不会进行回滚的 * 默认spring事务只在发生未被捕获的 runtime excetpion()时才回滚. * * spring aop ...
- Mac 10.12安装PDF浏览工具Foxit Reader
说明:永久没费的跨平台PDF浏览工具. 下载: (链接: https://pan.baidu.com/s/1pLEAoXH密码: is5j)