在開發中驗證碼是比較常用到有效防止這種問題對某一個特定注冊用戶用特定程序暴力破解方式進行不斷的登陸嘗試的方式。
此演示程序包括三個文件:
1.index.jsp:登錄頁面
2.image.jsp:生成驗證碼圖片頁面
3.result.jsp:結果頁面
【頁面顯示】

【頁面代碼】
1.index.jsp
html代碼
- <html><body>??????
- <formmethod=postaction="result.jsp">??????
- <inputtype=textname=inputmaxlength=4>??????
- <imgborder=0src="image.jsp">??????
- <inputtype="submit"value="submit">??????
- </form></body></html>??
[注意]:(1)使用maxlength屬性來限制輸入字符;
(2)使用<img>標簽來顯示生成的驗證碼圖片.
2.image.jsp
- <%@ page contentType="image/JPEG"??????
- ????import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*"??????
- ????? pageEncoding="GBK"%><%!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);???????
- ????????returnnew Color(r, g, b);???????
- ????? }%><%???????
- ??????
- ????? response.setHeader("Pragma", "No-cache");???????
- ????? response.setHeader("Cache-Control", "no-cache");???????
- ????? response.setDateHeader("Expires", 0);???????
- ??????
- ??????
- ????int width = 60, 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));???????
- ??????
- ??????
- ??????
- ??????
- ??????
- ??????
- ????? g.setColor(getRandColor(160, 200));???????
- ????for (int i = 0; i < 100; 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);???????
- ????? }???????
- ??????
- ??????
- ????? String sRand = "";???????
- ????for (int i = 0; i < 4; 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);???????
- ????? }???????
- ??????
- ??????
- ????? session.setAttribute("code", sRand);???????
- ??????
- ??????
- ????? g.dispose();???????
- ??????
- ??????
- ????? ImageIO.write(image, "JPEG", response.getOutputStream());???????
- %>??
??
[注意]:
(1)contentType值設置為"image/JPEG"
- <%@ page language="java"import="java.util.*"pageEncoding="GBK"%>??
- <html><body>??
- <%???
- ????? String input=request.getParameter("input");???
- ????? String code=(String)session.getAttribute("code");???????
- ????? if(input.equals(code)){???
- ????????? out.println("驗證成功!");???
- ????? }else{???
- ????????? out.println("驗證失敗!");???
- ????? }???
- %>??
- </body></html>??
posted on 2007-04-18 23:38
EricWong 閱讀(353)
評論(0) 編輯 收藏 所屬分類:
Java