如何在用户注册或登录时使用验证码图片(转)
2008-09-23 14:49
543 查看
1、 策略
1.1 在用户登录或注册的 jsp 页面上创用验证码图片,显示在界面上,同时将验证码构成的字符串保存到会话中。
1.2 在后台检查用户上传的验证信息是否与保存在会话中的验证码字符串相同,如果不同要求用户重输。
2、 产生验证码图片的 java 代码:
package bbs.business;
import javax.servlet.ServletRequest;
import java.util.Random;
import java.awt.Font;
import javax.servlet.http.HttpServletRequest;
import java.awt.Color;
import java.awt.image.BufferedImage;
import java.awt.Graphics;
public class ValidateImage {
public static String createImage(ServletRequest request,String imageName){
HttpServletRequest servletRequest=(HttpServletRequest)request;
Random random=new Random();
String valiCode="";
for (int i = 0; i < 4; i++) {
String rand = String.valueOf(random.nextInt(10));
valiCode+=rand;
}
if(servletRequest.getSession()==null)
servletRequest.getSession().setAttribute("valiCode",valiCode);
else
servletRequest.getSession(false).setAttribute("valiCode",valiCode);
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);
g.setFont(new Font("Atlantic Inline",Font.PLAIN,18));
g.setColor(Color.black);
g.drawString(valiCode.substring(0,1), 8, 17);
g.drawString(valiCode.substring(1,2), 20, 15);
g.drawString(valiCode.substring(2,3), 35, 18);
g.drawString(valiCode.substring(3,4), 45, 15);
g.dispose();
servletRequest.getSession(false).setAttribute(imageName,image);
return valiCode;
}
}
方法 createImage(ServletRequest request,String imageName) 产生图片并以 imageName 为键名保存到会话中,返回图片上显示的字符串,这个字符也以“ valiCode ”为键名保存在会话中。
3、 运用方法
3.1 在 jsp 页面上产生验证码图片并显示,将字符保存在会话中。
<td> 验证码 </td>
<td>
<html:text property="valiCode " size="8"></html:text>
</td>
<% bbs.business.ValidateImage.createImage(request,"valiImage");%>
<td>
<nhtml:image name="valiImage" path="/showImage" refresh="true"/> *
</td>
效果如下:
<nhtml:image name="valiImage" path="/showImage" refresh="true"/> 使用了 newxy新坐标 的标签 <nhtml:image/> , 作用是显示内存中的图片。
3.2 在后台进行比较。
String valiCode=(String) user.get("valiCode");
if (valiCode == null || !(valiCode.equals(servletRequest.getSession(false).getAttribute("valiCode")))) {
servletRequest.setAttribute("message", " 提示:验证码不正确! ");
return forward;
}
user 是 formBean , valiCode 是用户上传的验证信息。如果上传的验证信息不等于保存在会话中的验证信息则返回。
1.1 在用户登录或注册的 jsp 页面上创用验证码图片,显示在界面上,同时将验证码构成的字符串保存到会话中。
1.2 在后台检查用户上传的验证信息是否与保存在会话中的验证码字符串相同,如果不同要求用户重输。
2、 产生验证码图片的 java 代码:
package bbs.business;
import javax.servlet.ServletRequest;
import java.util.Random;
import java.awt.Font;
import javax.servlet.http.HttpServletRequest;
import java.awt.Color;
import java.awt.image.BufferedImage;
import java.awt.Graphics;
public class ValidateImage {
public static String createImage(ServletRequest request,String imageName){
HttpServletRequest servletRequest=(HttpServletRequest)request;
Random random=new Random();
String valiCode="";
for (int i = 0; i < 4; i++) {
String rand = String.valueOf(random.nextInt(10));
valiCode+=rand;
}
if(servletRequest.getSession()==null)
servletRequest.getSession().setAttribute("valiCode",valiCode);
else
servletRequest.getSession(false).setAttribute("valiCode",valiCode);
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);
g.setFont(new Font("Atlantic Inline",Font.PLAIN,18));
g.setColor(Color.black);
g.drawString(valiCode.substring(0,1), 8, 17);
g.drawString(valiCode.substring(1,2), 20, 15);
g.drawString(valiCode.substring(2,3), 35, 18);
g.drawString(valiCode.substring(3,4), 45, 15);
g.dispose();
servletRequest.getSession(false).setAttribute(imageName,image);
return valiCode;
}
}
方法 createImage(ServletRequest request,String imageName) 产生图片并以 imageName 为键名保存到会话中,返回图片上显示的字符串,这个字符也以“ valiCode ”为键名保存在会话中。
3、 运用方法
3.1 在 jsp 页面上产生验证码图片并显示,将字符保存在会话中。
<td> 验证码 </td>
<td>
<html:text property="valiCode " size="8"></html:text>
</td>
<% bbs.business.ValidateImage.createImage(request,"valiImage");%>
<td>
<nhtml:image name="valiImage" path="/showImage" refresh="true"/> *
</td>
效果如下:
<nhtml:image name="valiImage" path="/showImage" refresh="true"/> 使用了 newxy新坐标 的标签 <nhtml:image/> , 作用是显示内存中的图片。
3.2 在后台进行比较。
String valiCode=(String) user.get("valiCode");
if (valiCode == null || !(valiCode.equals(servletRequest.getSession(false).getAttribute("valiCode")))) {
servletRequest.setAttribute("message", " 提示:验证码不正确! ");
return forward;
}
user 是 formBean , valiCode 是用户上传的验证信息。如果上传的验证信息不等于保存在会话中的验证信息则返回。
相关文章推荐
- 如何在用户注册或登录时使用验证码图片
- 如何在用户注册或登录时使用验证码图片(转)
- 如何在用户注册或登录时使用验证码图片
- django学习——用户注册时如何实现验证码图片
- JSP作业4 - 使用JSP+JavaBean+Servlet实现用户登录注册页面
- 使用Forms Authentication实现用户注册、登录
- destoon 的登录过程,如何使用cookie来判断用户是否登录
- 使用Forms Authentication实现用户注册、登录 (二)用户注册与登录
- 使用Forms Authentication实现用户注册、登录 (二)用户注册与登录
- 使用Forms Authentication实现用户注册、登录
- S3K3针对用户注册案例简单介绍了如何使用 DDD
- centos7使用非root用户进行ssh免密登录,提示key没有在主机注册
- 使用MVC模型的用户登录及注册(注册验证)
- 如何设计出用户体验良好的登录/注册页面
- 使用Forms Authentication实现用户注册、登录 (二)用户注册与登录
- [Oracle] 如何使用触发器实现IP限制用户登录
- 如何实现共享软件网络授权认证,包括注册新用户、登录、修改密码等操作
- 如何使用不同的用户登录到共享文件夹
- JSP作业3 - 使用JSP实现简单的用户登录注册页面
- 使用Forms Authentication实现用户注册、登录 (一)基础知识