ssh生成随机数字验证码操作步骤_JSP编程

1、login.jsp页面程序

复制代码 代码如下:

<script type="text/javascript">
function changeValidateCode(obj) {
//获取当前的时间作为参数,无具体意义
var timenow = new Date().getTime();
//每次请求需要一个不同的参数,否则可能会返回同样的验证码
//这和浏览器的缓存机制有关系,也可以把页面设置为不缓存,这样就不用这个参数了。
obj.src="rand.action?d="+timenow;
}
</script>

在表单中添加下面这句话:

复制代码 代码如下:

<s:text name="random"></s:text>:<s:textfield name="rand" size="5"></s:textfield><img src="rand.action" onclick="changeValidateCode(this)" title="点击图片刷新验证码"/>

2、RandomNumUtil.java 生成验证码的类文件

复制代码 代码如下:

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.imageio.stream.ImageOutputStream;
public class RandomNumUtil {
private ByteArrayInputStream image;//图像
private String str;//验证码
private RandomNumUtil(){
init();//初始化属性
}
/*
* 取得RandomNumUtil实例
*/
public static RandomNumUtil Instance(){
return new RandomNumUtil();
}
/*
* 取得验证码图片
*/
public ByteArrayInputStream getImage(){
return this.image;
}
/*
* 取得图片的验证码
*/
public String getString(){
return this.str;
}
private void init() {
// 在内存中创建图象
int width=85, height=20;
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
// 获取图形上下文
Graphics g = image.getGraphics();
// 生成随机类
Random random = new Random();
// 设定背景色
g.setColor(getRandColor(200,250));
g.fillRect(0, 0, width, height);
// 设定字体
g.setFont(new Font("Times New Roman",Font.PLAIN,18));
// 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到
g.setColor(getRandColor(160,200));
for (int i=0;i<155;i++)
{
int x = random.nextInt(width);
int y = random.nextInt(height);
int xl = random.nextInt(12);
int yl = random.nextInt(12);
g.drawLine(x,y,x+xl,y+yl);
}
// 取随机产生的认证码(6位数字)
String sRand="";
for (int i=0;i<6;i++){
String rand=String.valueOf(random.nextInt(10));
sRand+=rand;
// 将认证码显示到图象中
g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));
// 调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成
g.drawString(rand,13*i+6,16);
}
//赋值验证码
this.str=sRand;
//图象生效
g.dispose();
ByteArrayInputStream input=null;
ByteArrayOutputStream output = new ByteArrayOutputStream();
try{
ImageOutputStream imageOut = ImageIO.createImageOutputStream(output);
ImageIO.write(image, "JPEG", imageOut);
imageOut.close();
input = new ByteArrayInputStream(output.toByteArray());
}catch(Exception e){
System.out.println("验证码图片产生出现错误:"+e.toString());
}
this.image=input;/* 赋值图像 */
}
/*
* 给定范围获得随机颜色
*/
private 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);
}
}

3、RandomAction.java 生成验证码的action程序

复制代码 代码如下:

import java.io.ByteArrayInputStream;
import com.mxl.util.RandomNumUtil;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class RandomAction extends ActionSupport{
private ByteArrayInputStream inputStream;
public String execute() throws Exception{
RandomNumUtil rdnu=RandomNumUtil.Instance();
this.setInputStream(rdnu.getImage());//取得带有随机字符串的图片
ActionContext.getContext().getSession().put("random", rdnu.getString());//取得随机字符串放入HttpSession
return SUCCESS;
}
public void setInputStream(ByteArrayInputStream inputStream) {
this.inputStream = inputStream;
}
public ByteArrayInputStream getInputStream() {
return inputStream;
}
}

4、LoginAction.java 验证验证码的action

复制代码 代码如下:

private String rand; //表单中的rand
public String getRand() {
return rand;
}
public void setRand(String rand) {
this.rand = rand;
}
//从session中取出RandomAction.java 中生成的验证码random
String arandom=(String)(ActionContext.getContext().getSession().get("random"));
//下面就是将session中保存验证码字符串与客户输入的验证码字符串对比了
if(arandom.equals(this.getRand())) {
ActionContext.getContext().getSession().put("user", this.getUsername());
return SUCCESS;
}
else {
return ERROR;
}

5、配置struts.xml文件

复制代码 代码如下:

<!-- Random验证码 -->
<action name="rand" class="com.mxl.rand.RandomAction">
<result type="stream">
<param name="contentType">image/jpeg</param>
<param name="inputName">inputStream</param>
</result>
</action>

6、生成的验证码图片演示(实现的6位数字的验证码)
说明:
如果想修改验证码生成的个数,需要修改以下几个地方:
第一点:
int width=85, height=20; int width=85, height=20;
第二点: for (int i=0;i<6;i++) for (int i=0;i<6;i++)
数字6,修改成你想生成的位数就可以了~

时间: 2024-09-18 17:25:38

ssh生成随机数字验证码操作步骤_JSP编程的相关文章

javascript-求一随机生成四位数字验证码的代码,并验证输入的与生成的是否一致

问题描述 求一随机生成四位数字验证码的代码,并验证输入的与生成的是否一致 求一随机生成四位数字验证码的代码,并验证输入的与生成的是否一致 解决方案 这个和js没有关系.验证码的作用是防止机器模仿人滥用的.因为机器识别不规则图像很困难,但是人可以做到这一点. 所以这个需要服务器去验证,如果是客户端验证,那么攻击者很容易破解你的生成和验证环节,验证码也就形同虚设了. 你需要一种服务器编程语言.比如jsp或者asp等等,随机产生验证码,用绘图的方法绘制,加上干扰线.噪点,进行文字的变形等等输出到客户端

生成随机图片验证码

项目中,生成随机图片验证码代码:先保存,后学习: package cn.digitalpublishing.servlet; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.IOException; import javax.

jsp引用servlet生成的验证码代码演示_JSP编程

此演示代码主要包括以下三部分:1.checkCode.java:用于生成验证码2.checkCodeServler3.check.jsp 验证 下面是checkCode.java的内容: 复制代码 代码如下: //用于获取四位随机数     private char mapTable[] = {'0','1','2','3','4','5','6','7','8','9'};      //生成验证码,并返回随机生成的数字     public String getEnsure(int widt

jsp+Servlet编程实现验证码的方法_JSP编程

本文实例讲述了jsp+Servlet编程实现验证码的方法.分享给大家供大家参考,具体如下: 这里用到两个类,一个用于验证码实现,一个为后台Servlet验证输入是否正确: CodeUtil.java--------验证码具体实现: package util; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.

JSP随机验证图片如何制作_JSP编程

小编整理了一篇关于模仿腾讯随机验证图片的文章.下面直接上代码吧!一个Java 类和一个JSP 页面. Java类代码: 以下是JSP模仿腾讯随机验证图片引用片段: package icewee.image; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.

freemarker 数字格式化深入理解_JSP编程

一.使用内建函数c 特点: 不管其表现形式是怎样的(例如"123,456.123,456"."123456.123456"."000123456.123456000"."123,456.123456"."1,2345,6.123456"),只要小数分割符是'.'它就能转化成计算机能够识别的字符串形式,而且都是123456.123456,计算机处理的时候是没有那些所谓的千位分隔符的(空格或逗号),而且计算机支

JSP中使用JDBC连接MySQL数据库的详细步骤_JSP编程

1,首先在自己新建的项目文本框中输入Web Project的名称,然后单击下一步. 2,继续单击下一步 3,把Generate web.xml deployment descriptor复选框勾上. 4,单击Finish,完成Web project工程的创建. 5,打开MyEclipse Datebase Explore,如图所示 6,按图中所示填写各项内容,并通过Add JARS添加相应的数据库驱动程序. 7,通过Test Driver测试驱动是否连接成功,需要输入密码.成功后如下图所示 8,

java+sql2005 随机抽取试题的代码_JSP编程

复制代码 代码如下: import java.awt.BorderLayout; import java.util.*; import java.awt.event.*; import java.awt.Container; import java.awt.EventQueue; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Stateme

jsp页面循环集合操作整理_JSP编程

第一种:struts1.2循环遍历元素,name是结果集.引用标签库<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %> <logic:iterate>主要用来处理在页面上输出集合类,集合一般来说是下列之一: 1. java对象的数组 2. ArrayList.Vector.HashMap等 例: 复制代码 代码如下: <logic:iterate