文档章节

Struts实现验证码

lindaliving
 lindaliving
发布于 2014/06/01 20:26
字数 515
阅读 18
收藏 0
 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<String,Object> 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<String, Object> getSession() {
  return session;
 }

 @Override
 public void setSession(Map<String, Object> session) {
  // TODO Auto-generated method stub
  this.session = session;
 }

}

//最后配置Struts.xml文件即可
<!-- 验证码映射 -->
  <action name ="SecurityCodeImageAction" class= "com.web.service.SecurityCodeImageAction">
   <result name="success" type="stream">
    <param name="contentType">image/jpeg</param>
    <param name="inputName">imageStream</param>
    <param name="bufferSize">2048</param>
   </result>
  </action>

本文转载自:

共有 人打赏支持
lindaliving
粉丝 1
博文 10
码字总数 3043
作品 0
广州
程序员
Struts2+jquery 以ajax方式 实现jsp跟后台交互

功能:利用struts2+ajax从后台获取数据,并且数据以json格式传递 必备组建:struts2,juqery,struts2 json 插件 步骤: 1.ation应该继承 ActionSupport package com.thtf.lotterymanager.index....

lhsqjoe
2013/09/13
0
0
struts1.* 异常处理机制

几个重要类的说明 ActionServlet struts的核心类,用于初始化struts配置文件,处理发送到action的请求; ModuleConfig struts配置文件信息加载的接口,ModuleConfigImpl是接口的默认实现,可...

STG0825
2013/08/29
0
0
ST2-045 For POC

转载请注明: 转载自Legend‘s BLog 本文链接地址: ST2-045 For POC 利用方法: 漏洞说明: Apache Struts 2被曝存在远程命令执行漏洞,漏洞编号S2-045,CVE编号CVE-2017-5638,在使用基于J...

apachecn_飞龙
2017/03/18
0
0
Stripes tips(1)-Stripes简介

初识 Stripes 和我们熟悉 Struts 1 和 Struts 2 类似,Stripes 同样是一种展示层框架,用于快速构建web程序。在使用Struts 1,WebWork 和 Struts 2 等框架的时候,通常需要大量额外的 XML 配...

晨曦之光
2012/03/09
0
0
MVC 框架 - Apache Struts

Struts 是 Apache软件基金会(ASF)赞助的一个开源项目。它最初是 Jakarta项目中的一个子项目,并在2004年3月成为ASF的顶级项目。它通过采用 Java Servlet/JSP 技术,实现了基于Java EE Web...

匿名
2008/09/07
0
8

没有更多内容

加载失败,请刷新页面

加载更多

00.编译OpenJDK-8u40的整个过程

前言 历经2天的折腾总算把OpenJDK给编译成功了,要说为啥搞这个,还得从面试说起,最近出去面试经常被问到JVM的相关东西,总感觉自己以前学的太浅薄,所以回来就打算深入学习,目标把《深入理...

凌晨一点
40分钟前
0
0
python: 一些关于元组的碎碎念

初始化元组的时候,尤其是元组里面只有一个元素的时候,会出现一些很蛋疼的情况: def checkContentAndType(obj): print(obj) print(type(obj))if __name__=="__main__": tu...

Oh_really
昨天
2
2
jvm crash分析工具

介绍一款非常好用的jvm crash分析工具,当jvm挂掉时,会产生hs_err_pid.log。里面记录了jvm当时的运行状态以及错误信息,但是内容量比较庞大,不好分析。所以我们要借助工具来帮我们。 Cras...

xpbob
昨天
89
0
Qt编写自定义控件属性设计器

以前做.NET开发中,.NET直接就集成了属性设计器,VS不愧是宇宙第一IDE,你能够想到的都给你封装好了,用起来不要太爽!因为项目需要自从全面转Qt开发已经6年有余,在工业控制领域,有一些应用...

飞扬青云
昨天
3
0
我为什么用GO语言来做区块链?

Go语言现在常常被用来做去中心化系统(decentralised system)。其他类型的公司也都把Go用在产品的核心模块中,并且它在网站开发中也占据了一席之地。 我们在决定做Karachain的时候,考量(b...

HiBlock
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部