谈谈验证码的jsp实现

goodflash 2003-04-01 01:22:53
大家来谈谈验证码的jsp实现,要求,生成四位数位图。
...全文
73 点赞 收藏 28
写回复
28 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
alemjann 2003-09-02
有没有不用servlet的?
另外: chenbug(chenbug) 提到:“由javascript生成图片简单吧”。
能具体说说怎么实现么?
回复
dkmilk 2003-05-21
http://www.java-cn.com/javasource/source_detail.jsp?id=95

这是改过的原码

效果查看。www.schoolwx.com
回复
gary_shi 2003-05-15
rocwzp(鹏)
运行tomcat 之前 export DISPLAY=localhost:0
回复
rocwzp 2003-05-15
我在Linux下运行getImg时,private Font mFont=new Font("宋体", Font.PLAIN,12);//设置字体 这个语句出错,错误显示要连接XWindow的服务,我的Linux上没有安装Xwindow,请问这该如何解决?
回复
goodflash 2003-04-09
to dkmilk(迪克牛奶) :谢谢。
回复
dkmilk 2003-04-04
其实随机数应该在servlet中产生并给session付值,
但为了省时间我没有写,大家自己改一下就行
调用方法<img src='http://wuyang/schoolwx/servlet/getImg?count=4527'>

//package com.schoolwx.util;
import java.io.*;
import java.util.*;
import com.sun.image.codec.jpeg.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.awt.*;
import java.awt.image.*;

public class getImg extends HttpServlet {

private Font mFont=new Font("宋体", Font.PLAIN,12);//设置字体
//处理post
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException {

doGet(request,response);
}
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException {

String s;
int intCount;
s=request.getParameter("count");
if(s==null||s.equals("")){
System.out.println("参数错误,参数必须为0至1000的整数");
s="0";
}
try{
intCount=Integer.parseInt(s);
System.out.println(intCount);
}catch(Exception e){
System.out.println("参数错误,参数必须为0至1000的整数");
intCount=1000;
s="0000";
}
if(intCount<10)s="000"+s;
else if(intCount<100)s="00"+s;
else if(intCount<1000)s="0"+s;
else s=s+"";
response.setContentType("image/gif");
ServletOutputStream out=response.getOutputStream();
BufferedImage image=new BufferedImage(35,14,BufferedImage.TYPE_INT_RGB);
Graphics g=image.getGraphics();
g.setColor(Color.yellow);
g.fillRect(1,1,33,12);
g.setColor(Color.black);
g.setFont(mFont);
System.out.println(s.length());
char c;
for(int i=0;i<4;i++) {
c=s.charAt(i);
g.drawString(c+"",i*7+4,11);
}

JPEGImageEncoder encoder=JPEGCodec.createJPEGEncoder(out);
encoder.encode(image);
out.close();
}
}

回复
goodflash 2003-04-02
注:我完成之后,将源码公开,请大家互相帮助。。。
回复
goodflash 2003-04-02
to aleccheung(浪子狂人) :

能不能把你的Servlet共享一下?谢谢。
回复
conning333 2003-04-02
其实为什么都要放在session里呢。没有其他的好办法吗?
回复
aleccheung 2003-04-02
我是这样弄的:
用Servlet 生成一个随机数字(或字符串)的图片,然后用session 记录。
在登陆口处
<input name="loginPIN" ><img src=/servlet/LoginPIN >
...........
你按照上面的字符串输入就可以了,
后台验证程序与session 比较一下就ok 了。

其实一切方法都是相对的防范而已。
回复
goodflash 2003-04-02
to chenbug,谢谢。还有谁有好招数?本帖将是“验证码完全解决方案”
回复
chenbug 2003-04-02
1. 在注册页面,用jsp生成随机验证码,放入session中,并传递给javascript,由javascript生成图片(由javascript生成图片简单吧),在注册页面中,点完成时将验证码通过form中的隐藏控件传递到注册的验证页面
2. 在注册验证页面,从session中取出验证码,同注册页面传递来的值比较,如果相同,就可以了,否则返回注册页面

我是这样实现的
回复
chili1979 2003-04-02
把图片作为数组存储,根据产生的随机数取出对应的图片。
至于 试三次后还是不对,停用账户半小时
我想是应用COOKIES来实现吧。
回复
chenbug 2003-04-02
1. 在注册页面,用jsp生成随机验证码,放入session中,并传递给javascript,由javascript生成图片(由javascript生成图片简单吧),在注册页面中,点完成时将验证码通过form中的隐藏控件传递到注册的验证页面
2. 在注册验证页面,从session中取出验证码,同上一个页面取出的值比较,如果相同,就可以了,否则返回注册页面

我是这样实现的
回复
goodflash 2003-04-02
to zhaofj(叶三耿) ,能说详细一些吗?
回复
goodflash 2003-04-02
zhaofj(叶三耿),好的,谢谢你。
回复
zhaofj 2003-04-02
To:goodflash:

这个问题比较复杂,不是几句话说得清的,有空写篇文档,专门探讨web应用中安全策略的实现,到时候第一个发给你。
回复
javalei 2003-04-01
太深奥了,有相关的中文教程吗?谢谢!
回复
zhaofj 2003-04-01
对付DOS攻击,验证码只是一种简易的策略,远不如加载安全策略来得强大和实用。
回复
gary_shi 2003-04-01
楼主可以试一下用JAVA SCRIPT把密码加密了,验证码未必要用图片实现
回复
加载更多回复
相关推荐
发帖
Web 开发
创建于2007-09-28

8.0w+

社区成员

Java Web 开发
申请成为版主
帖子事件
创建了帖子
2003-04-01 01:22
社区公告
暂无公告