当前位置:文档之家› struts2生成随机验证码图片

struts2生成随机验证码图片

struts2生成随机验证码图片
struts2生成随机验证码图片

之前想做一个随机验证码的功能,自己也搜索了一下别人写的代码,然后自己重新用struts2实现了一下,现在将我自己实现代码贴出来!大家有什么意见都可以指出来!

首先是生成随机验证码图片的action:

CreateImageAction:

--------------------------------------------------------------------------------------------------------------------- packagecom.xiaoluo.action;

importjava.awt.Color;

importjava.awt.Font;

importjava.awt.Graphics;

importjava.awt.image.BufferedImage;

importjava.io.ByteArrayInputStream;

importjava.io.ByteArrayOutputStream;

importjava.util.Random;

importjavax.imageio.ImageIO;

importjavax.servlet.http.HttpServletResponse;

importjavax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class CreateImageAction extends ActionSupport

{

privateByteArrayInputStreaminputStream;

private static int WIDTH = 60;

private static int HEIGHT = 20;

publicByteArrayInputStreamgetInputStream()

{

returninputStream;

}

public void setInputStream(ByteArrayInputStreaminputStream)

{

this.inputStream = inputStream;

}

private static String createRandom()

{

String str = "0123456789qwertyuiopasdfghjklzxcvbnm"; 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 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 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);

}

@Override

public String execute() throws Exception

{

HttpServletResponse response = ServletActionContext.getResponse();

// 设置浏览器不要缓存此图片

response.setHeader("Pragma", "no-cache");

response.setHeader("Cache-Control", "no-cache");

response.setDateHeader("Expires", 0);

String rands = createRandom();

BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);

Graphics g = image.getGraphics();

// 产生图像

drawBackground(g);

drawRands(g, rands);

// 结束图像的绘制过程,完成图像

g.dispose();

ByteArrayOutputStreamoutputStream = new ByteArrayOutputStream();

ImageIO.write(image, "jpeg", outputStream);

ByteArrayInputStream input = new ByteArrayInputStream(outputStream

.toByteArray());

this.setInputStream(input);

HttpSession session = ServletActionContext.getRequest().getSession();

session.setAttribute("checkCode", rands);

input.close();

outputStream.close();

return SUCCESS;

}

}

_________________________________________________________________________

以上是生成随机验证码图片的action,将生成的随机数放到session里,然后页面提交到验证随机数的action:

LoginValidateAction:

_____________________________________________________ packagecom.xiaoluo.action;

importjavax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class LoginValidateAction extends ActionSupport

private String checkCode;

public String getCheckCode()

{

returncheckCode;

}

public void setCheckCode(String checkCode)

{

this.checkCode = checkCode;

}

@Override

public String execute() throws Exception

{

return SUCCESS;

}

@Override

public void validate()

{

HttpSession session = ServletActionContext.getRequest().getSession();

String checkCode2 = (String)session.getAttribute("checkCode");

if(!checkCode.equals(checkCode2))

{

this.addActionError("输入的验证码不正确,请重新输入!");

}

}

}

_______________________________________________________

下面是struts.xml配置部分代码:

________________________________________________

image/jpeg

inputStream

/success.jsp

/login.jsp

________________________________________________________________________

最后就是jsp部分的代码:

login.jsp:

_____________________________________________________________________

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<%@ taglib prefix="s" uri="/struts-tags"%>

<%

String path = request.getContextPath();

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %>

My JSP 'login.jsp' starting page

带有验证码的登陆界面

用户名:

密码:

验证码:


Java登陆验证模块的实现及小结

登陆验证模块的实现 登陆页面验证首先是验证账号, 验证码是否填写,密码长度是否符合要求,验证码是否正确。这几个验证是通过自定义的几个$.fn扩展函数实现的($.fn.remote=Function(url,msg, msgCnt){})实现的,一般将这些自定义的函数放在一个js文件中,便于维护。 自定义函数一般包含相应的提示字符串,及节点对象$(“#id”)等参数。通过函数对节点的var value = this.val();value是否为空或空字符串的判断,相应的改变节点text属性的值。1验证码正确验证 1)验证码正确与否的验证是通过采用了Ajax技术的函数实现的。对应的action的result 的属性为json(result要配置ok的参数),action类要有布尔类型的名为ok的属性,通过返回值ok,更改相应的改变节点text属性的值。 如: $.fn.remote=function(url,msg,msgCnt){ var value=this.val();//获得表单提交的数据,如你所填入的验证码/资费名称 var name=this.attr("name");//获得表单名称,如验证码文本框的name:verifiCode var b=false; $.ajax({url:url+"?"+name+"="+value,dataTyp e:"json",async:false,success:function(data){ if(data){ $(msgCnt).text(""); b=true; }else{ $(msgCnt).text(msg); } } }); return b; }; 2)验证码的点击更新是利用了result=stream的属性(要配置name="inputName",name="contentType"的参数),点击发送请求,对应的action(该类必须有InputStream类的属性,且名字要和result相应参数的属性值相同)生成验证码并存入session。 2账户和密码的验证 当前面一系列的验证结果都满足条件时,才能提交表单。可定义一个函数实现:if(b1 && b2 && b4) {$("#loginForm").submit();} 相应action 接受到数据后,根据账户和密码调用DAO的相关方法,查询返回admin。 如果admin存在则转发到主页面(通过result在admin的不同状态下返回的字符串实现不同的type="redirectAction"),此时将admin存入session。为后面的登陆检查验证做准备。 session.put(KEY_ADMIN, admin); 如果不存在就,还是停留在登陆页面。 3检查登陆验证。 为了防止未登录而访问数据,通过struts2的自定义拦截器功能实现登陆检查验证。 可通过实现接口Interceptor或者抽象类AbstractInterceptor,我选择继承AbstractIntercepto,相对较简洁。在接口定义的方法intercept(ActionInvocation in)实现验证

自动生成验证码图片的工具类,收藏起来备用。

[原]自动生成验证码图片的工具类,收藏起来备用。用法:直接调用其静态方法即可。 Map map = ImageUtil.getImage();//获取图片,将图片转换成InputStream流 String key = map.keySet().iterator().next();//获取图片上的字符 BufferedImage image = map.get(key);//获取BufferedImage,赋值给imageStream其中,String为验证码的值,BufferedImage为验证码的图片。 该工具类的代码如下:ImageUtil.java package action; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.util.HashMap; import java.util.Map; import java.util.Random; public final class ImageUtil { private static final String[] chars = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", "东", "南", "西", "北", "中", "发", "白" }; private static final int SIZE = 5;//验证码长度 private static final int LINES = 20;//干扰线条数 private static final int WIDTH = 200;//图片宽度 private static final int HEIGHT = 100;//图片高度 private static final int FONT_SIZE = 60;//字体高度 public static Map getImage() { StringBuffer sb = new StringBuffer(); BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB); Graphics graphic = image.getGraphics(); graphic.setColor(Color.LIGHT_GRAY); graphic.fillRect(0, 0, WIDTH, HEIGHT); Random ran = new Random(); //画随机字符 for(int i=1;i<=SIZE;i++){ int r = ran.nextInt(chars.length); graphic.setColor(getRandomColor()); graphic.setFont(new Font(null,Font.BOLD+Font.ITALIC,FONT_SIZE));

C#生成随机验证码例子

C#生成随机验证码例子: 前端: 1 2 3验证码: 4 5 6 给验证码图片绑定单击事件: $("#valiateCode").click(function () { $("#imgCode").attr("src",$("#imgCode").attr("src")+1); }); 后台生成验证码图片代码: ValidateCode.ashx 1 <%@ WebHandler Language="C#" Class="ValidateCode" %> 2 3using System; 4using System.Web; 5using System.Drawing; 6using System.Web.SessionState; 7 8public class ValidateCode : IHttpHandler, IRequiresSessionState 9 { 10 HttpContext context; 11public void ProcessRequest (HttpContext context1) { 12this.context = context1; 13 CreateCheckCodeImage(GenerateCheckCode()); 14 }

JSP生成验证码_源代码

jsp验证码实现源代码 (2011-10-16 11:11:40) 验证码原理:①首先随机生成数字或字母;②把生成的数字或字母保存在Session这次会话中;③最后,在登陆页面上把接收用户输入的验证码与生成的验证码相匹配,成功返回TRUE,失败则返回FALSE; 演示程序包括三个文件: 1.login.jsp:登录页面 2.code.jsp:生成验证码图片页面 3.check.jsp:验证结果 code.jsp <%@ page contentType="image/jpeg" import="java.awt.*, java.awt.image.*,java.util.*,javax.imageio.*" %> <% // 在内存中创建图象 int width=60, height=20; BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); // 获取图形上下文 Graphics g = image.getGraphics(); // 设定背景色 g.setColor(new Color(0xDCDCDC)); g.fillRect(0, 0, width, height); //画边框 g.setColor(Color.black); g.drawRect(0,0,width-1,height-1); // 随机产生的认证码(4位数字) String rand =""+ (Math.random()*10000); rand = rand.substring(0,rand.indexOf(".")); switch(rand.length()) { case 1: rand = "000"+rand; break; case 2: rand = "00"+rand; break; case 3: rand = "0"+rand; break; default: rand = rand.substring(0,4); break; }

《Java范例开发大全》

下面是377个Java的例子。如果你是牛人,看看你能做出多少? 如果有人不相信这些例子都是Java做的,可以看看清华大学的《Java范例开发大全》实例1开发第一个Java程序 实例2自动提升 实例3自动转换 实例4常用基础类型之强制转换 实例5算术运算符 实例6关系运算符 实例7逻辑运算符 实例8位运算符 实例9移位运算符 实例10转型运算符 实例11常量与变量 实例12各种进制的转换 实例13 Java中的进制与移位运算符 实例14判断输入的年份是否为闰年 实例15抽奖活动 实例16xx乘法表 实例17如何列出素数 实例18 Java中的递归 实例19男生女生各多少人

实例20求xx数 实例21求任意一个正数的阶乘 实例22求n的n次方 实例23利用for循环输出几何图形 实例24xx 实例25求1到100之间的和 实例26存上100元需要多少天 实例27输出100之间的所有偶数 实例28如何判断回文数字 实例29输出100之间的所有奇数 实例30求最大的随机数 实例31判断字母分类 实例32优良及差 实例33打印任意一年日历 实例34一年四季的划分 实例35除0发生的算术异常(ArithmeticException) 实例36数组下标越界异常(ArrayIndexOutOfBoundsException)实例37数组元素类型不匹配异常(ArrayStoreException) 实例38强制类型转换异常(ClassCastException) 实例39索引越界异常(IndexOutOfBoundsException) 实例40空指针异常(NullPointerException)

c#生成验证码的方法

新建一个WaterMark.ASHX文件,将如下代码Copy进去 <%@ WebHandler Language="C#" Class="WaterMark" %> using System; using System.Web; using System.Drawing; using System.Drawing.Drawing2D; using System.Web.SessionState; public class WaterMark : IHttpHandler, IRequiresSessionState // 要使用session必须实现该接口,记得要导入System.Web.SessionState命名空间 { public void ProcessRequest(HttpContext context) { string checkCode = GenCode(5); // 产生5位随机字符 context.Session["Code"] = checkCode; //将字符串保存到Session中,以便需要时进行验证 System.Drawing.Bitmap image = new System.Drawing.Bitmap(70, 22); Graphics g = Graphics.FromImage(image); try { //生成随机生成器 Random random = new Random(); //清空图片背景色 g.Clear(Color.White); // 画图片的背景噪音线 int i; for (i = 0; i < 25; i++) { int x1 = random.Next(image.Width); int x2 = random.Next(image.Width); int y1 = random.Next(image.Height); int y2 = random.Next(image.Height); g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2); } Font font = new System.Drawing.Font("Arial", 12, (System.Drawing.FontStyle.Bold)); System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2F, true); g.DrawString(checkCode, font, brush, 2, 2);

jsp页面验证码源代码

jsp页面验证码源代码 在java后台中生成验证码的ImageIO传到前端页面显示,同时把验证码的v alue值传入session 中用于与用户输入的验证码进行匹配,在用户验证中使用ajax技术,在不刷新页面的同时进行验证码验证。 程序结构图: VerifyCodeUtils程序主要内容为通过Java生成验证码的图片,以及验证码的value值,程序如下: package utils; import java.awt.Color; import java.awt.Font;

import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.util.HashMap; import java.util.Map; import java.util.Random; publicclass VerifyCodeUtils { privatestatic BufferedImage image = null; privatestatic Random random = new Random(); //在自己定义的一些数中,生成4位随机数 publicstatic String getVerifyCode() { String str = ""; char[] code = newchar[]{'A','B','C','D','E','F','G','H','I ','J','K','L','M','N','P','Q','R','S','T','U', 'V','W','X','Y','Z','a','b','c','d','e','f','g','h','i',' j','k','m','n','p','q','r','s','t', 'u','v','w','x','y','z','2','3','4','5','6','7','8','9'}; Random random = new Random(); for(int i = 0; i <4; i++) { str += String.valueOf(code[random.nextInt(code.length)]); } return str; }

java日志与验证码

java日志: 日志的网上很多也: https://www.doczj.com/doc/5f16428833.html,/view/ccb3ce1efc4ffe473368abdf.html 你自己看看。我们的系统里面一般都是自己写了一个程序。将用户的操作信息,IP,时间,操作内容写入我们数据库里面。 Tomcat的日志一般我们用绿色版,它自带有日志功能。 java验证码: 1 根据一个随机值,生成一个模糊图片,然后将随机值封装到session中。 1.1 生成图片的类: package com.framework.security; import java.awt.*; import java.awt.image.BufferedImage; import java.io.Serializable; import java.util.Random; /** *随机验证码 *User: *Date:2006-11-2 *Time:11:31:00 *To change this template use File|Settings|File Templates. */ public class ImgCheckCode implements Serializable { private String charRandomCode = ""; private BufferedImage imageRandomCode; private int width; private int height; public ImgCheckCode(int width, int height) { this.width = width; this.height = height; create(4); } public ImgCheckCode(int width, int height, int length) { this.width = width; this.height = height;

实用的JavaScript验证码生成代码

实用的 JavaScript 验证码生成代码-JAVA:https://www.doczj.com/doc/5f16428833.html,