生成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生成验证码代码的更多相关文章

  1. 【开发技术】Java生成验证码

    Java生成验证码 为了防止用户恶意,或者使用软件外挂提交一些内容,就得用验证码来阻止,虽然这个会影响用户体验,但为了避免一些问题很多网站都使用了验证码;今天下午参考文档弄了一个验证码,这里分享一下; ...

  2. Java生成验证码原理(jsp)

     验证码的作用: 验证码是Completely Automated Public Turing test to tell Computers and Humans Apart(全自动区分计算机和人类的 ...

  3. Java生成验证码并进行验证(转)

    本文转自http://blog.csdn.net/worm0527/article/details/51030864 一.实现思路 使用BufferedImage用于在内存中存储生成的验证码图片 使用 ...

  4. Java生成验证码_转

    为了防止用户恶意,或者使用软件外挂提交一些内容,就得用验证码来阻止,虽然这个会影响用户体验,但为了避免一些问题很多网站都使用了验证码;今天下午参考文档弄了一个验证码,这里分享一下;这是一个web工程, ...

  5. java生成验证码结合springMVC

    在用户登录的时候,为了防止机器人攻击都会设置输入验证码,本篇文章就是介绍java如何生成验证码并使用在springMVC项目中的. 第一步:引入生成图片验证码的工具类 import java.awt. ...

  6. Java生成验证码(二)

    前一篇博客已经介绍了如何用Java servlet产生验证码,本篇继续介绍如何使用一些开源组件生成验证码 ————————————————————————————————————————————   ...

  7. java生成验证码并可刷新

    手心创建一个简单的页面来显示所创建的验证码 <body> <form action="loginName.mvc" method="post" ...

  8. Java 生成验证码图片

    生成验证码图片并对提交的输入进行验证 // HttpServletResponse常见应用——生成验证码 // 利用BufferedImage类生产随机图片 public static final i ...

  9. Java生成验证码小工具

    无意中看到一个生成简易验证码的小工具类(保存学习): 工具类代码: import java.awt.BasicStroke; import java.awt.Color; import java.aw ...

随机推荐

  1. 基于Ryu REST API的VLAN实现

    目录 0.预备知识 1.实验内容 2.编写脚本addflow.sh一步实现流表下发 3.使用api查看流表 4.实验结果 0.预备知识 ryu控制器的API文档:ryu.app.ofctl_rest ...

  2. ERS:百科

    ylbtech-ERS:百科 ERS=(Enterprises Run System)企业运行系统 企业运行系统-ERS,是继ERP系统之后的企业管理控制软件系统的终极形式,有着非常美好的市场前景,尤 ...

  3. 自定义Camera的setPictureSize拍照完毕出现花屏怎么解决

    Camera.Parameters parameters = mCamera.getParameters();// 获得相机参数 List<Camera.Size> sizes = par ...

  4. 03Flutter仿京东商城项目 封装适配库以及实现左右滑动ListView

    ScreenAdaper.dart import 'package:flutter_screenutil/flutter_screenutil.dart'; class ScreenAdaper { ...

  5. 阶段5 3.微服务项目【学成在线】_day02 CMS前端开发_19-CMS前端页面查询开发-页面原型-Table组件测试

    页面填充内容.用一个表格来显示内容 3.1.2.1 Element-UI介绍 本项目使用Element-UI来构建界面,Element是一套为开发者.设计师和产品经理准备的基于 Vue 2.0 的桌面 ...

  6. 阶段5 3.微服务项目【学成在线】_day02 CMS前端开发_22-CMS前端页面查询开发-Api调用-跨域解决

    点击页面查询按钮 ,报错.跨域问题. 前端端口是11000 请求后端的服务地址端口是31001 出现跨域 开始解决跨域 把前面带端口的地址 用变量代替 只有带/api/cms开头的就转发的服务端310 ...

  7. 防止sshd服务被暴力破解

    方法有很多种,这里介绍两种. (1).配置安全的shhd设置 不允许root用户直接登录到系统,添加一个普通用户,必要时再切换到root用户. 修改默认端口号. 不允许密码登录,只能通过密钥登录系统. ...

  8. React Native清除缓存实现

    清除缓存使用的第三方:react-native-http-cache   Github: https://github.com/reactnativecn/react-native-http-cach ...

  9. 4.git的基本命令

    版本库 index 暂存区,HEAD 将来1.0,2.0的指向  多次add,一次commit 每次commit一次,head就指向了最新的版本.head是回退版本的时候会用到 一般有开发的分支,ma ...

  10. java 注解@interface

    类注解: package com.cglibs; import java.lang.annotation.ElementType; import java.lang.annotation.Retent ...