博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Struts实现验证码
阅读量:6253 次
发布时间:2019-06-22

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

hot3.png

 import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.image.BufferedImage;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.util.Random;import com.sun.image.codec.jpeg.ImageFormatException;import com.sun.image.codec.jpeg.JPEGCodec;import com.sun.image.codec.jpeg.JPEGImageEncoder;//定义一个工具人,用于产生验证码图片public class SecurityCode { public static final int WIDTH = 100; public static final int HEIGHT = 25; public static String checkstring ;  //得到验证码的BtyArrayInputStream流 public static ByteArrayInputStream getImageAsInputStream()  {  BufferedImage image = getRandomImage();  return convertImageToStream(image); }  //得到验证码图片 public static BufferedImage getRandomImage() {  BufferedImage randomImage = new BufferedImage(WIDTH, HEIGHT,    BufferedImage.TYPE_INT_RGB);  Graphics g = randomImage.getGraphics();  setBackground(g);  setBorder(g);  paintLine(g);  checkstring = setRandomString((Graphics2D) g);    g.dispose();  return randomImage; } //设置边框 private static void setBorder(Graphics g) {  g.setColor(Color.WHITE);  g.drawRect(1, 1, WIDTH - 2, HEIGHT - 2); } //随机数 private static String setRandomString(Graphics2D g) {  StringBuilder sb = new StringBuilder();  g.setFont(new Font("宋体", Font.BOLD, 22));  String randomString = "abcdefghijkmnpqrstuvwsyz23456789";  for (int i = 0; i < 4; i++) {   g.setColor(Color.red);   int x = 20 * i + 10;   String str = randomString.charAt(new Random().nextInt(randomString     .length())) + "";   sb.append(str);   int roll = new Random().nextInt() % 30;   g.rotate(roll * Math.PI / 180, x, 20);   g.drawString(str, x, 20);   g.rotate(-roll * Math.PI / 180, x, 20);  }  return sb.toString(); } //画干扰线 private static void paintLine(Graphics g) {  g.setColor(Color.GREEN);  for (int i = 0; i < 5; i++) {   int x1 = new Random().nextInt(WIDTH);   int y1 = new Random().nextInt(HEIGHT);   int x2 = new Random().nextInt(WIDTH);   int y2 = new Random().nextInt(HEIGHT);   g.drawLine(x1, y1, x2, y2);  } } //设置背景颜色 private static void setBackground(Graphics g) {  // TODO Auto-generated method stub  g.setColor(Color.WHITE);  g.fillRect(0, 0, WIDTH, HEIGHT); }  //将image验证码转化成字节数组输入流 private static ByteArrayInputStream convertImageToStream(BufferedImage image) {  ByteArrayInputStream inputStream = null;  ByteArrayOutputStream bos = new ByteArrayOutputStream();  JPEGImageEncoder jpeg = JPEGCodec.createJPEGEncoder(bos);  try {   jpeg.encode(image);   byte[] bts = bos.toByteArray();   inputStream = new ByteArrayInputStream(bts);  } catch (ImageFormatException e) {   e.printStackTrace();  } catch (IOException e) {   e.printStackTrace();  }  return inputStream; }}//写一个Action类,用于接收请求,并且回送验证码图片public class SecurityCodeImageAction extends ActionSupport implements  SessionAware { private Map
 session; private ByteArrayInputStream imageStream;  @Override public String execute() throws Exception{    imageStream = SecurityCode.getImageAsInputStream();  String securityCode = SecurityCode.checkstring;  session.put("checkstring", securityCode);    return SUCCESS; }  public ByteArrayInputStream getImageStream() {  return imageStream; } public void setImageStream(ByteArrayInputStream imageStream) {  this.imageStream = imageStream; } public Map
 getSession() {  return session; } @Override public void setSession(Map
 session) {  // TODO Auto-generated method stub  this.session = session; }}//最后配置Struts.xml文件即可
  
   
    
image/jpeg    
imageStream    
2048     

转载于:https://my.oschina.net/u/1461277/blog/271523

你可能感兴趣的文章
2018-2019-2 20165232 《网络对抗技术》 Exp6 信息搜集与漏洞扫描
查看>>
Visual Studio中“后期生成事件命令行” 中使用XCopy命令
查看>>
代码导读
查看>>
Atlas读写分离[高可用]
查看>>
shell实现rpm -e 一键卸载所有相关包以及依赖
查看>>
坦克大战中摄像机的设置
查看>>
ros:出现:error: ros/ros.h: No such file or directory
查看>>
Java坦克大战 (四) 之子弹的产生
查看>>
web 中常用的两种上传文件的方法总结
查看>>
SCVMM 2012 简体中文正式版部署手册
查看>>
BZOJ 3097: Hash Killer I【构造题,思维题】
查看>>
C/C++中int128的那点事
查看>>
ios多线程学习笔记(2)
查看>>
Entity Framework Extended Library (EF扩展类库,支持批量更新、删除、合并多个查询等)...
查看>>
黄聪:windowss7显示桌面图标设置在任务栏的解决办法
查看>>
(五)浅谈测试用例
查看>>
读《淘宝数据魔方技术架构解析》有感
查看>>
SQL数据是否存在(是否有数据)判断,表,存储过程是否存在
查看>>
多个Img标签之间的间隙处理方法
查看>>
g++ error: expected ‘)’ before ‘*’ token
查看>>