在开发中验证码是比较常用到有效防止这种问题对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试的方式。
此演示程序包括三个文件:
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 阅读(349)
评论(0) 编辑 收藏 所属分类:
Java