首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

登陆页面的验证码的兑现方法

2012-10-10 
登陆页面的验证码的实现方法利用struts2框架写的,把验证功能的代码写成了action,在网页上直接调用这个img

登陆页面的验证码的实现方法

利用struts2框架写的,把验证功能的代码写成了action,在网页上直接调用这个<img scr="***.action">就可以获得验证码图像,而验证码的内容则直接setAttribute到session里面了,到网页上直接调用就行了,或者用el表达式,按这个步骤做就会有下面的效果:
登陆页面的验证码的兑现方法

?

action的代码:

import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.image.BufferedImage;import java.io.OutputStream;import java.util.Random;import javax.imageio.ImageIO;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import org.apache.struts2.interceptor.ServletRequestAware;import org.apache.struts2.interceptor.ServletResponseAware;import com.opensymphony.xwork2.ActionSupport;public class ValidationCodeAction extends ActionSupport implementsServletResponseAware, ServletRequestAware{private HttpServletRequest request;private HttpServletResponse response;public void setServletResponse(HttpServletResponse response){this.response = response;}public void setServletRequest(HttpServletRequest request){this.request = request;}    // 图形验证码的字符集合,系统将随机从这个字符串中选择一些字符作为验证码 private String codeChars = "%#23456789abcdefghkmnpqrstuvwxyzABCDEFGHKLMNPQRSTUVWXYZ";// 返回一个随机颜色(Color对象)private Color getRandomColor(int minColor, int maxColor){Random random = new Random();// 保存minColor最大不会超过255if (minColor > 255)minColor = 255;//  保存minColor最大不会超过255if (maxColor > 255)maxColor = 255;//  获得红色的随机颜色值int red = minColor + random.nextInt(maxColor - minColor);//  获得绿色的随机颜色值int green = minColor + random.nextInt(maxColor - minColor);//  获得蓝色的随机颜色值int blue = minColor + random.nextInt(maxColor - minColor);return new Color(red, green, blue);}public String execute() throws Exception{//  获得验证码集合的长度int charsLength = codeChars.length();//  下面三条记录是关闭客户端浏览器的缓冲区//  这三条语句都可以关闭浏览器的缓冲区,但是由于浏览器的版本不同,对这三条语句的支持也不同//  因此,为了保险起见,建议同时使用这三条语句来关闭浏览器的缓冲区response.setHeader("ragma", "No-cache");response.setHeader("Cache-Control", "no-cache");response.setDateHeader("Expires", 0);//  设置图形验证码的长和宽(图形的大小)int width = 90, height = 20;BufferedImage image = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);Graphics g = image.getGraphics();//  获得用于输出文字的Graphics对象Random random = new Random();g.setColor(getRandomColor(180, 250));// 随机设置要填充的颜色g.fillRect(0, 0, width, height);//  填充图形背景//  设置初始字体g.setFont(new Font("Times New Roman", Font.ITALIC, height));g.setColor(getRandomColor(120, 180));// 随机设置字体颜色    //  用于保存最后随机生成的验证码StringBuilder validationCode = new StringBuilder();//  验证码的随机字体String[] fontNames = { "Times New Roman", "Book antiqua",  "Arial" };        //  随机生成3个到5个验证码for (int i = 0; i < 3 + random.nextInt(3); i++){//  随机设置当前验证码的字符的字体g.setFont(new Font(fontNames[random.nextInt(3)], Font.ITALIC,height)); //  随机获得当前验证码的字符char codeChar = codeChars.charAt(random.nextInt(charsLength));validationCode.append(codeChar);//  随机设置当前验证码字符的颜色g.setColor(getRandomColor(10, 100));//  在图形上输出验证码字符,x和y都是随机生成的g.drawString(String.valueOf(codeChar), 16 * i + random.nextInt(7),height - random.nextInt(6));}HttpSession session = request.getSession();session.setMaxInactiveInterval(5 * 60);  // 设置session对象5分钟失效//  将验证码保存在session对象中,key为validation_codesession.setAttribute("validation_code", validationCode.toString());g.dispose();//  关闭Graphics对象OutputStream os = response.getOutputStream();ImageIO.write(image, "JPEG", os);// 以JPEG格式向客户端发送图形验证码return null;}}

?struts.xml的代码:只要没有重复的名字贴到里面就可以了

<action name="validate_code" name="code">输入右面的认证码:<input type="text"  name="oneUserInfo.verifyCodeDigit" />     <img src="validate_code.action"  />

热点排行