为shark的jspClient增加一个带验证码的登陆界面

类别:Java 点击:0 评论:0 推荐:

1:登陆界面如下


2:登陆结果


3:代码如下
login.jsp
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<%@ page language="java" contentType="text/html; charset=utf-8" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>

<html:html xhtml="true" locale="true">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Shark Test</title>
<html:base/>
<link rel="stylesheet" type="text/css" href="css/example.css" />
</head>
<body>

<!--hr noshade="noshade"/-->


<html:form action="/processLogin">

<table class=tableborder1 cellSpacing=1 cellPadding=3 align=center >

  <tbody>
  <tr>
 <td colspan="2"><div align="center"><html:errors/></div></td>
  </tr>
  <tr>
    <th vAlign=center align=middle colSpan=3 height=25><div align="center"><bean:message key="info.inputUsernamePwd"/></th>
  </tr>
  <tr>
    <td class=tablebody1 vAlign=center><bean:message key="login.username"/>:</td>
    <td class=tablebody1 vAlign=center>
         <html:text property="username" size="20" maxlength="50"/>
    </td>
    <td>
         <html:link action=""><bean:message key="info.noRegister"/>?</html:link>
    </td>
  </tr>
  <tr>
    <td class=tablebody1 vAlign=center><bean:message key="login.password"/>:</td>
    <td class=tablebody1 vAlign=center>
 <html:password property="passwd" size="20" maxlength="50"/>
    </td>
    <td> 
 <html:link action=""><bean:message key="info.forgetPassword"/>?</html:link>
    </td>
   </tr>
    <tr>
      <td class=tablebody1 vAlign=center><bean:message key="login.authcode"/>:</td>
      <td class=tablebody1 vAlign=center>
       <html:text property="authcode" size="6" maxlength="6" ></html:text>
    </td>
    <td>       
        <img border=0 src="AuthorizationCodeImg">
      </td>
    </tr>
   <tr>
 <td class=tablebody1 vAlign=center align=right><html:submit><bean:message key="button.submit" /></html:submit></td>
 <td></td>
 <td class=tablebody1 vAlign=center align=left><html:cancel/></td>
   </tr>
   </tbody>
   </table>
</html:form>
</body>
</html:html>

AuthorizationCodeImg.java

/*
 * 创建日期 2004-12-29
 *
 */
package hk.com.csl.comm.util;

/**
 * <p>Title: Shark Test</p>
 * <p>Description: Shark Test System</p>
 * <p>Copyright: Copyright (c) 2004</p>
 * <p>Company: Completesolution Solution(GD) Company</p>
 * @author Jason
 * @version 1.0
 */

import hk.com.csl.comm.util.CreateImage;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import com.sun.image.codec.jpeg.*;
import java.awt.image.*;

public class AuthorizationCodeImg
    extends HttpServlet {


  //Initialize global variables
  public void init() throws ServletException {
  }

  //Process the HTTP Get request
  public void doGet(HttpServletRequest request, HttpServletResponse response) throws
      ServletException, IOException {
 response.setContentType("image/jpeg");
 
 CreateImage createImg = new CreateImage();
 
 ServletOutputStream out = response.getOutputStream();
 BufferedImage image = createImg.createImg(6);
 JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
 encoder.encode(image);
 out.close();
 HttpSession session = request.getSession();
 session.setAttribute("rand",createImg.sRand);
  }

  //Process the HTTP Post request
  public void doPost(HttpServletRequest request, HttpServletResponse response) throws
      ServletException, IOException {
    doGet(request, response);
  }

  //Clean up resources
  public void destroy() {
  }
}

CreateImage.java(此段代码从网上所得,稍作修改)

/*
 * 创建日期 2004-12-29
 *
 */
package hk.com.csl.comm.util;

/**
 * <p>Title: Shark Test</p>
 * <p>Description: Shark Test System</p>
 * <p>Copyright: Copyright (c) 2004</p>
 * <p>Company: Completesolution Solution(GD) Company</p>
 * @author Jason
 * @version 1.0
 */
import java.awt.*;
import java.awt.image.*;
import java.util.*;
import hk.com.csl.comm.util.CreateRandomString;

 

public class CreateImage {

public String sRand="";

/**
 * Get Random Color
 * @param fc
 * @param bc
 * @return Color
 */

public 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);
    return new Color(r,g,b);
}

/**
 * Create a image
 * @param size
 * @return image
 */
public BufferedImage createImg(int size){
    // 在内存中创建图象
    //int width=60, height=20;
    int width=12*size, 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(new Color());
    //g.drawRect(0,0,width-1,height-1);
    // 随机产生100条干扰线,使图象中的认证码不易被其它程序探测到
    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);
    }
   
    // 取随机产生的认证码(size位字符串)
       
        String rand = new CreateRandomString().getRandomString(size);
        sRand = rand;
        // 将认证码显示到图象中
        g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));//调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成
        g.drawString(rand,6,16);

    // 图象生效
    g.dispose();
   
   
    return image;
 }
}

CreateRandomString.java
/*
 * 创建日期 2004-12-29
 *
 */
package hk.com.csl.comm.util;

/**
 * <p>Title: 产生随机字符串</p>
 * <p>Description: Shark Test System</p>
 * <p>Copyright: Copyright (c) 2004</p>
 * <p>Company: Completesolution Solution(GD) Company</p>
 * @author Jason
 * @version 1.0
 */


import java.util.*;

 

public  class CreateRandomString{
      
 public CreateRandomString() {
 }
 //Main method
 //public static String getRandomString(int size){
 
/**
 * Get String Created by Random Function
 * @param size
 * @return String
 */
 public String getRandomString(int size){
 //char[] c={'!','@','#','$','%','*','&','^','(',')','<','>','{','}','[',']','?','/','1','2','3','4','5','6','7','8','9','0','q','w','e','r','t','y','u','i','o','p','a','s','d','f','g','h','j','k','l','z','x','c','v','b','n','m'};
 char[] c={'1','2','3','4','5','6','7','8','9','0','q','w','e','r','t','y','u','i','o','p','a','s','d','f','g','h','j','k','l','z','x','c','v','b','n','m'};
 
 Random random = new Random();  //初始化随机数产生器
 StringBuffer sb =new StringBuffer();
 for(int i=0;i<size;i++){
     sb.append(c[Math.abs(random.nextInt()) %c.length]);
 }
 return sb.toString();
 }

/*
 public static void main(String[] args) {
   try {
       String needString=getRandomString(20);
       System.out.println(needString);


   }
   catch(Exception e) {
     e.printStackTrace();
   }
   new CreateRandomString();
 }*/
}

 




 

本文地址:http://com.8s8s.com/it/it12064.htm