博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
j2ee-验证码
阅读量:4101 次
发布时间:2019-05-25

本文共 5769 字,大约阅读时间需要 19 分钟。

由于项目中用到了验证码,在网上找了一些示例,应用到了自己的项目中,还是只讲验证码忽略业务代码。

验证码本身和Ibtatis,Mybatis框架无关框架无关

1, 在struts2-Spring-Ibatis框架中使用验证码

-页面部分

  • struts配置文件部分
image/jpeg
inputStream

-Action部分

private ByteArrayInputStream inputStream;public String createImage() throws IOException{    HttpServletResponse response = this.getResponse();       // 设置浏览器不要缓存此图片       response.setHeader("Pragma", "no-cache");       response.setHeader("Cache-Control", "no-cache");       response.setDateHeader("Expires", 0);       BufferedImage image = CreateImageUtil.drawImage();       ByteArrayOutputStream outputStream = new ByteArrayOutputStream();       ImageIO.write(image, "jpeg", outputStream);       ByteArrayInputStream input = new ByteArrayInputStream(outputStream               .toByteArray());       this.setInputStream(input);       input.close();       //强制刷新         outputStream.flush();         outputStream.close();    return SUCCESS;}
  • 工具类
import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.image.BufferedImage;import java.util.Random;import org.apache.struts2.ServletActionContext;public class CreateImageUtil {
private static int WIDTH = 90; private static int HEIGHT = 28; private static String createRandom(){ String str = "0123456789zxcvbnmasdfghjklqwertyuiop"; char[] rands = new char[4]; Random random = new Random(); for (int i = 0; i < 4; i++) { rands[i] = str.charAt(random.nextInt(36)); } return new String(rands); } private static void drawBackground(Graphics g) { // 画背景 g.setColor(new Color(0xDCDCDC)); g.fillRect(0, 0, WIDTH, HEIGHT); // 随机产生 120 个干扰点 for (int i = 0; i < 120; i++) { int x = (int) (Math.random() * WIDTH); int y = (int) (Math.random() * HEIGHT); int red = (int) (Math.random() * 255); int green = (int) (Math.random() * 255); int blue = (int) (Math.random() * 255); g.setColor(new Color(red, green, blue)); g.drawOval(x, y, 1, 0); } } private static void drawRands(Graphics g, String rands) { g.setColor(Color.BLACK); g.setFont(new Font(null, Font.ITALIC | Font.BOLD, 18)); // 在不同的高度上输出验证码的每个字符 g.drawString("" + rands.charAt(0), 1, 17); g.drawString("" + rands.charAt(1), 16, 15); g.drawString("" + rands.charAt(2), 31, 18); g.drawString("" + rands.charAt(3), 46, 16); System.out.println(rands); } public static BufferedImage drawImage(){ String rands = createRandom(); //将验证码放入Session ServletActionContext.getRequest().getSession().setAttribute("checkCode", rands); BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB); Graphics g = image.getGraphics(); // 产生图像 drawBackground(g); drawRands(g, rands); // 结束图像 的绘制 过程, 完成图像 g.dispose(); return image; }}
  • 效果
    这里写图片描述

2, 在spring mvc-Mybatis框架中使用验证码

  • 页面部分
  • Controller部分
@RequestMapping("createImage")public void createImage(HttpServletRequest request,         HttpServletResponse response,HttpSession session) throws IOException{       // 设置浏览器不要缓存此图片       response.setHeader("Pragma", "no-cache");       response.setHeader("Cache-Control", "no-cache");       response.setDateHeader("Expires", 0);       BufferedImage image = CreateImageUtil.drawImage(session);       ImageIO.write(image, "jpeg",  response.getOutputStream());       response.getOutputStream().flush();}
  • 工具类部分与上一个类似
import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.image.BufferedImage;import java.util.Random;import javax.servlet.http.HttpSession;public class CreateImageUtil {
private static int WIDTH = 90; private static int HEIGHT = 28; private static String createRandom(){ String str = "0123456789asdfghjklzxcvbnmpoiuytrewq"; char[] rands = new char[5]; Random random = new Random(); for (int i = 0; i < 5; i++) { rands[i] = str.charAt(random.nextInt(36)); } return new String(rands); } private static void drawBackground(Graphics g) { // 画背景 g.setColor(new Color(0xDCDCDC)); g.fillRect(0, 0, WIDTH, HEIGHT); // 随机产生 120 个干扰点 for (int i = 0; i < 120; i++) { int x = (int) (Math.random() * WIDTH); int y = (int) (Math.random() * HEIGHT); int red = (int) (Math.random() * 255); int green = (int) (Math.random() * 255); int blue = (int) (Math.random() * 255); g.setColor(new Color(red, green, blue)); g.drawOval(x, y, 1, 0); } } private static void drawRands(Graphics g, String rands) { g.setColor(Color.BLACK); g.setFont(new Font(null, Font.ITALIC | Font.BOLD, 18)); // 在不同的高度上输出验证码的每个字符 g.drawString("" + rands.charAt(0), 1, 17); g.drawString("" + rands.charAt(1), 16, 15); g.drawString("" + rands.charAt(2), 31, 18); g.drawString("" + rands.charAt(3), 46, 16); g.drawString("" + rands.charAt(4), 56, 20); System.out.println(rands); } public static BufferedImage drawImage(HttpSession session){ String rands = createRandom(); //将验证码放入Session session.setAttribute("authcode", rands); BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB); Graphics g = image.getGraphics(); // 产生图像 drawBackground(g); drawRands(g, rands); // 结束图像 的绘制 过程, 完成图像 g.dispose(); return image; }}
  • 效果
    这里写图片描述

注:部分代码来自网络,另外这两种方式都是在项目中应用过的。不足之处请大家多多指教。

你可能感兴趣的文章
智能指针CComPtr 和 CComQIPtr
查看>>
ASV2010
查看>>
AS3变量作用域问题
查看>>
#ifndef 在头文件中的作用
查看>>
FB安装技巧
查看>>
Lua4虚拟机运行概述
查看>>
C++中explicit关键字的作用
查看>>
AS3中Object与Dictionary的区别
查看>>
C++中的rand()函数
查看>>
SVN文件版本冲突解决方法
查看>>
map、hash_map、迭代器
查看>>
C++技巧
查看>>
STL迭代器简介
查看>>
AS3_MVC
查看>>
AS3_MVC解析
查看>>
关于C++中继承、重载、掩盖
查看>>
C++中的各种继承方式规则
查看>>
复制显示对象通用函数
查看>>
智能指针的原理及实现方案
查看>>
智能指针
查看>>