1. 程式人生 > >JSP登入頁面包括驗證碼的驗證

JSP登入頁面包括驗證碼的驗證

login.jsp,程式碼如下:

[plain] view plain copy  print?
  1. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>  
  2. <%  
  3. String path = request.getContextPath();  
  4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
  5. %>  
  6. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  7. <html>  
  8.   <head>  
  9.     <base href="<%=basePath%>">  
  10.     <title>My JSP 'login.jsp' starting page</title>  
  11.     <meta http-equiv="pragma" content="no-cache">  
  12.     <meta http-equiv="cache-control" content="no-cache">  
  13.     <meta http-equiv="expires" content="0">      
  14.     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
  15.     <meta http-equiv="description" content="This is my page">  
  16.     <!--  
  17.     <link rel="stylesheet" type="text/css" href="styles.css">  
  18.     -->  
  19.   </head>  
  20.   <%  
  21.     String incode = (String)request.getParameter("code");   
  22.     String rightcode = (String)session.getAttribute("rCode");   
  23.     if(incode != null && rightcode != null){  
  24.         if(incode.equals(rightcode)){  
  25.             out.println("驗證碼輸入正確!");  
  26.         }else{  
  27.             out.println("驗證碼輸入不正確,請重新輸入!");  
  28.         }  
  29.     }  
  30.   %>  
  31.   <body>  
  32.     <form action="login.jsp" method="post">  
  33.     使用者名稱:  
  34.     <input type="text" name="username"/><br/>  
  35.     密碼:  
  36.     <input type="password" name="password"/><br/>  
  37.     驗證碼:  
  38.     <img src="number.jsp"/>  
  39.     <input type="text" name="code"/>  
  40.     <input type="submit" value="登入"/>  
  41.     </form>  
  42.   </body>  
  43. </html>  

number.jsp提供了驗證碼的提取功能,如下:
[plain] view plain copy  print?
  1. <%@ page contentType="image/jpeg" language="java" import="java.util.*,java.awt.*,java.awt.image.*,javax.imageio.*" pageEncoding="utf-8"%>  
  2. <%!  
  3.     Color getRandColor(int fc,int bc){  
  4.         Random random = new Random();  
  5.         if(fc > 255){  
  6.             fc = 255;  
  7.         }  
  8.         if(bc < 255){  
  9.             bc = 255;  
  10.         }  
  11.         int r = fc +random.nextInt(bc-fc);  
  12.         int g = fc +random.nextInt(bc-fc);  
  13.         int b = fc +random.nextInt(bc-fc);  
  14.         return new Color(r,g,b);  
  15.     }  
  16. %>  
  17. <%   
  18.     //設定頁面不快取  
  19.     response.setHeader("Pragma","no-cache");  
  20.     response.setHeader("Cache-Control","no-catch");  
  21.     response.setDateHeader("Expires",0);  
  22.     //在記憶體中建立圖象  
  23.     int width = 60;  
  24.     int height = 20;  
  25.     BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);  
  26.     //建立圖象  
  27.     Graphics g = image.getGraphics();  
  28.     //生成隨機物件  
  29.     Random random = new Random();  
  30.     //設定背景色  
  31.     g.setColor(getRandColor(200,250));  
  32.     g.fillRect(0,0,width,height);  
  33.     //設定字型  
  34.     g.setFont(new Font("Tines Nev Roman",Font.PLAIN,18));  
  35.     //隨機產生干擾線  
  36.     g.setColor(getRandColor(160,200));  
  37.     for(int i = 0; i < 255; i++){  
  38.         int x = random.nextInt(width);  
  39.         int y = random.nextInt(height);  
  40.         int xl = random.nextInt(12);  
  41.         int yl = random.nextInt(12);  
  42.     }  
  43.     //隨機產生認證碼,4位數字  
  44.     String sRand = "";  
  45.     for(int i = 0; i < 4; i++){  
  46.         String rand = String.valueOf(random.nextInt(10));  
  47.         sRand  += rand;  
  48.         //將認證碼顯示到圖象中  
  49.         g.setColor(new Color(20 + random.nextInt(110),20 + random.nextInt(110),20 + random.nextInt(110)));  
  50.         g.drawString(rand,13*i+6,16);  
  51.     }  
  52.     session.setAttribute("rCode",sRand);  
  53.     //影象生效  
  54.     g.dispose();  
  55.     //輸出影象到頁面  
  56.     ImageIO.write(image,"JPEG",response.getOutputStream());  
  57.     out.clear();  
  58.     out = pageContext.pushBody();  
  59. %>