生成base64格式图片验证码
/**
* 验证码的候选内容
*/
private char codeSequence[] = {'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', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
/**
* 生成验证码
* 改造生成验证码的方式,将图片base64形式传到前台,而不是直接传验证码到前台
* @return
* @throws IOException
*/
public void imageCode() throws IOException {
HttpServletResponse resp = CommandContext.getResponse();
HttpServletRequest req = CommandContext.getRequest();
String method= req.getMethod();
if("OPTIONS".equals(method)){
return ;
}
Map map=new HashMap(); // 在内存中创建图象
int width = 65, height = 38;
BufferedImage image = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
// 获取图形上下文
Graphics g = image.getGraphics();
// 生成随机类
Random random = new Random();
// 设定背景色
g.setColor(getRandColor(230, 255));
g.fillRect(0, 0, 100, 40);
// 设定字体
g.setFont(new Font("Arial", Font.CENTER_BASELINE | Font.ITALIC, 20));
// 产生0条干扰线,
g.drawLine(0, 0, 0, 0); //存放验证码
StringBuffer sRand = new StringBuffer();
for (int i = 0; i < charCount; i++) {
String singleCode = String.valueOf(codeSequence[random.nextInt(codeSequence.length)]);
sRand.append(singleCode);
// 将认证码显示到图象中
g.setColor(getRandColor(100, 150));// 调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成
g.drawString(singleCode, 14 * i + 5, 25);
}
for(int i=0;i<(random.nextInt(5)+5);i++){
g.setColor(new Color(random.nextInt(255)+1,random.nextInt(255)+1,random.nextInt(255)+1));
g.drawLine(random.nextInt(70),random.nextInt(40),random.nextInt(70),random.nextInt(40));
g.drawLine(random.nextInt(70),random.nextInt(40),random.nextInt(70),random.nextInt(40));
} HttpSession session = req.getSession();
//获取clientid
String clientId= SystemUtil.getClientId(req);
if(StringUtils.isEmpty(clientId)){
//生成clientid
String userAgent=req.getHeader("User-Agent");
String sessionId=session.getId();
String cip= IpPolicy.getClientIP(req);
clientId=CodeUtil.genClientId(sessionId,cip,userAgent);
}
map.put("clientId", clientId);
if (isValidateCodeCaseSensitive) {
session.setAttribute("randomCode", sRand.toString());
SystemUtil.push2Cache(clientId, sRand.toString());
} else {
session.setAttribute("randomCode", sRand.toString().toLowerCase());
SystemUtil.push2Cache(clientId, sRand.toString().toLowerCase());
}
// 图象生效
g.dispose();
try{ ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
ImageIO.write(image, "jpg", outputStream);
BASE64Encoder encoder = new BASE64Encoder();
String base64Img = encoder.encode(outputStream.toByteArray());
base64Img="data:image/jpg;base64, "+base64Img.replaceAll("\n", "").replaceAll("\r", "");//删除 \r\n;
map.put("verCode", base64Img);
Object jsonObj = JSONSerializer.toJSON(map);
byte[] json = jsonObj.toString().getBytes("UTF-8");
resp.setContentType("text/plain;chartset=utf-8");
resp.setHeader("Cache-Control", "no-cache");
resp.setHeader("Expires", "0");
resp.setIntHeader("Content-Length", json.length);
ServletOutputStream responseOutputStream = resp.getOutputStream();
responseOutputStream.write(json);
// 以下关闭输入流!
responseOutputStream.flush();
responseOutputStream.close();
// 获得页面key值
return ;
} catch (IOException e) {
logger.error("生产验证码出错",e);
throw new SystemException("生产验证码出错",e);
}
} /**
* 给定范围获得随机颜色
*
* @param fc
* @param bc
* @return
*/
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);
}
JAVA生成验证码代码的更多相关文章
-
【开发技术】Java生成验证码
Java生成验证码 为了防止用户恶意,或者使用软件外挂提交一些内容,就得用验证码来阻止,虽然这个会影响用户体验,但为了避免一些问题很多网站都使用了验证码;今天下午参考文档弄了一个验证码,这里分享一下; ...
-
Java生成验证码原理(jsp)
验证码的作用: 验证码是Completely Automated Public Turing test to tell Computers and Humans Apart(全自动区分计算机和人类的 ...
-
Java生成验证码并进行验证(转)
本文转自http://blog.csdn.net/worm0527/article/details/51030864 一.实现思路 使用BufferedImage用于在内存中存储生成的验证码图片 使用 ...
-
Java生成验证码_转
为了防止用户恶意,或者使用软件外挂提交一些内容,就得用验证码来阻止,虽然这个会影响用户体验,但为了避免一些问题很多网站都使用了验证码;今天下午参考文档弄了一个验证码,这里分享一下;这是一个web工程, ...
-
java生成验证码结合springMVC
在用户登录的时候,为了防止机器人攻击都会设置输入验证码,本篇文章就是介绍java如何生成验证码并使用在springMVC项目中的. 第一步:引入生成图片验证码的工具类 import java.awt. ...
-
Java生成验证码(二)
前一篇博客已经介绍了如何用Java servlet产生验证码,本篇继续介绍如何使用一些开源组件生成验证码 ———————————————————————————————————————————— ...
-
java生成验证码并可刷新
手心创建一个简单的页面来显示所创建的验证码 <body> <form action="loginName.mvc" method="post" ...
-
Java 生成验证码图片
生成验证码图片并对提交的输入进行验证 // HttpServletResponse常见应用——生成验证码 // 利用BufferedImage类生产随机图片 public static final i ...
-
Java生成验证码小工具
无意中看到一个生成简易验证码的小工具类(保存学习): 工具类代码: import java.awt.BasicStroke; import java.awt.Color; import java.aw ...
随机推荐
-
jsp 以及javabean内省技术
l JSP l JavaBean及内省 l EL表达式 1.1 上次课内容回顾 会话技术: Cookie:客户端技术.将数据保存在客户端浏览器上.Cookie是有大小和个数的限制. Session:服 ...
-
Mac 终端命令大全
目录操作 命令名 功能描述 使用举例 mkdir 创建一个目录 mkdir dirname rmdir 删除一个目录 rmdir dirname mvdir 移动或重命名一个目录 mvdir dir1 ...
-
003.同时Ping多个IP(select实现IO复用,信号计时),ping程序升级版
写这个的目的主要是为了以后的方便: 1.信号计时函数的使用 2.ip头的构建和icmp头的构建 3.selec函数t的用法 代码实现: /src/ping.h /* * ping.h * * Crea ...
-
【9-6】Centos学习笔记
linux文件系统结构 常用技巧 快捷键启动终端 su命令,使用超级用户登陆 visudo :编辑用户权限 tar xf 文件名:解压文件 Vim编辑器 Tips yum包管理:Yum(全称为 Yel ...
-
执行插入语句时直接返回插入信息的自增id,判断是否为空
insert into userinfo(UserName,UserPass,RegTime,email)values('a','b',GETDATE(),'123@qq.com');select @ ...
-
【汉诺塔问题】UVa 10795 - A Different Task
[经典汉诺塔问题] 汉诺(Hanoi)塔问题:古代有一个梵塔,塔内有三个座A.B.C,A座上有64个盘子,盘子大小不等,大的在下,小的在上.有一个和尚想把这64个盘子从A座移到B座,但每次只能允许移动 ...
-
iOS开发总结-UIWebView 集成 浏览器
// // detailWebViewController.m // BJ // // Created by shirenfeng on 16/11/6. // Copyright © 2016年 c ...
-
Contest 2
A:辣鸡题.搜索怎么这么难啊.不会啊. B:裸的高斯消元,看起来可以优化到n2. #include<iostream> #include<cstdio> #include< ...
-
windows平台mongoDB安装配置
一.首先安装mongodb 1.官网下载mongoDB:http://www.mongodb.org/downloads,选择windows平台.安装时,一路next就可以了.我安装在了F:\mong ...
-
CentOS7更改网卡名称为eth0
#!/bin/bash # Author: fansik # Date: 2017年 09月 19日 星期二 :: CST sed -i 's@rhgb@rhgb net.ifnames=0@g' / ...