index.jsp代码
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>My JSP 'index.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <script type="text/javascript"> function check_admin(form){ if(form.user.value==""){ alert("请输入账号"); form.user.focus(); return false; } if(form.pass.value==""){ alert("请输入密码"); form.pass.focus(); return false; } if(form.verify.value==""){ alert("请输入验证码"); form.verify.focus(); return false; } } </script> </head> <body> <center> <form action="verify.jsp" method="post" onSubmit="return check_admin(this);"> <table width="400" border="1" bordercolor="#99ccff" cellpadding="0" cellspacing="0" style="border-collapse: collapse;"> <tr> <td height="40" colspan="2" align="center"> <font>后台登录</font> </td> </tr> <tr> <td height="40" align="right"> 账号: </td> <td width="200" align="left" valign="middle"> <input type="text" name="user" size="21" /> </td> </tr> <tr> <td height="40" align="right"> 密码: </td> <td width="40" align="left" valign="middle"> <input type="password" name="pass" size="21" /> </td> </tr> <tr> <td height="40" align="right"> 系统验证码: </td> <td > <img border="0" alt="系统验证码" src="verifyCode.jsp"> </td> </tr> <tr> <td height="40" align="right"> 输入验证码: </td> <td> <input type="text" name="verify" maxlength="4" size="21" value="" /> </td> </tr> <tr> <td height="40" colspan="2" align="center"> <input type="submit" value="确定" /> <input type="reset" value="重置" /> </td> </tr> </table> </form> </center> </body> </html>
verify.jsp代码
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>My JSP 'verify.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> </head> <body> <% String rand =(String)session.getAttribute("rand"); String input =request.getParameter("verify"); String strUser=request.getParameter("user"); String strPass=request.getParameter("pass"); if(strUser.equals("admin")&&strPass.equals("admin")&&rand.equals(input)){ out.println("<h3>登陆成功</h3>"); }else{ out.println("<h3>登陆失败</h3>"); } %> </body> </html>
verifyCode.jsp代码
<!--设置页面类型和编码 --> <%@ page contentType="image/jpeg" language="java" pageEncoding="utf-8"%> <!--导入需要的包 --> <%@ page import="java.util.*,java.awt.*,java.awt.image.*,javax.imageio.*"%> <!--给定范围获得随机颜色 --> <%! Color getRandColor(int fc,int bc) { if(fc>255) fc=255; if(bc>255) bc=255; //随机生成rgb颜色 Random random = new Random(); 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); } %> <% //设置页面不缓存 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,22)); //画边框 //g.setColor(new Color()); //g.drawRect(0,0,width-1,height-1); // 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到 g.setColor(getRandColor(160,200)); for (int i=0;i<155;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); } // 取随机产生的认证码(4位数字) 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),40+random.nextInt(110),60+random.nextInt(110))); //调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成 g.drawString(rand,13*i+6,16); } // 将认证码存入SESSION session.setAttribute("rand",sRand); // 图象生效 g.dispose(); // 输出图象到页面 ImageIO.write(image, "JPEG", response.getOutputStream()); %>