隨筆-39  評論-33  文章-0  trackbacks-0

          如何在用戶注冊或登錄時使用驗(yàn)證碼圖片

          ? 胡立新

          1、 策略

          1.1?? 在用戶登錄或注冊的 jsp 頁面上創(chuàng)用驗(yàn)證碼圖片,顯示在界面上,同時將驗(yàn)證碼構(gòu)成的字符串保存到會話中。

          1.2?? 在后臺檢查用戶上傳的驗(yàn)證信息是否與保存在會話中的驗(yàn)證碼字符串相同,如果不同要求用戶重輸。

          2、 產(chǎn)生驗(yàn)證碼圖片的 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) 產(chǎn)生圖片并以 imageName 為鍵名保存到會話中,返回圖片上顯示的字符串,這個字符也以“ valiCode ”為鍵名保存在會話中。

          3、 運(yùn)用方法

          3.1 jsp 頁面上產(chǎn)生驗(yàn)證碼圖片并顯示,將字符保存在會話中。

          ??? <td> 驗(yàn)證碼 </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新坐標(biāo) 的標(biāo)簽 <nhtml:image/> 作用是顯示內(nèi)存中的圖片。

          3.2 在后臺進(jìn)行比較。

          ??? String valiCode=(String) user.get("valiCode");

          ??? if (valiCode == null || !(valiCode.equals(servletRequest.getSession(false).getAttribute("valiCode")))) {

          ??????????? servletRequest.setAttribute("message", " 提示:驗(yàn)證碼不正確! ");

          ??????????? return forward;

          ??? }

          ??? user formBean valiCode 是用戶上傳的驗(yàn)證信息。如果上傳的驗(yàn)證信息不等于保存在會話中的驗(yàn)證信息則返回。

          posted on 2007-03-20 00:14 newxy新坐標(biāo) 閱讀(2759) 評論(1)  編輯  收藏

          評論:
          # re: 如何在用戶注冊或登錄時使用驗(yàn)證碼圖片[未登錄] 2007-05-15 15:23 | yt

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 通榆县| 昭苏县| 灵寿县| 鄂伦春自治旗| 江门市| 开化县| 安宁市| 晴隆县| 西宁市| 荥经县| 赫章县| 商洛市| 日照市| 上饶县| 肃宁县| 胶南市| 抚宁县| 双峰县| 吉安县| 静海县| 七台河市| 兴义市| 禹州市| 织金县| 河北省| 石泉县| 诸城市| 吴旗县| 临泉县| 岗巴县| 延川县| 邵武市| 平原县| 都江堰市| 政和县| 丰顺县| 周至县| 洛浦县| 隆德县| 呼玛县| 新丰县|