`
Javac_MyLife
  • 浏览: 9550 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

自己写的超简洁利用Servlet生成随机验证的图片

阅读更多
下午在JAVAEYE逛了一会  手有点痒了  可是一时又不知道写点什么  于是想起来几个月前 有位网友问我的 网站的随机图片的生成的问题  当时没有太在意 因为这个东西没有深接触过 只是知道有这种轻量级的东西  况且网上一GOOGLE会有一大片  出于好奇 俺动手写了一写  写的DEMO级别的 超简单  好了 俺上代码

下面我说一下思路吧   首先是随机图片的生成过程 绘制出一定尺寸的图片,产生一组随机数,一般是4个。这里要记得 要把产生的随机数存入到session里面 因为后面的校验还要用到。校验的时候就是获取用户的输入的验证码与session里面已经存取的那个做比较,匹配 则放行。



首先是Login.jsp
<h1> 带有验证码的登录的页面</h1>
<form action="servlet/LogonServlet" method="post">
	
	用户名  :  <input type="text" name="name" /><br/>
	
	密     码 :  <input type="text" name="password" /><br/>
	
	验证码 :  <input type="text" name="check_code" />
	  <img src="servlet/CheckCodeServlet"><br/>
	  
	  <input type="submit" value="登录"/>


然后是产生图片的Servlet   CheckCodeServlet  写图片的样式绘制的时候比较郁闷 很少用 所以查了一会API 不过最后终于搞定 不过不是很漂亮。。。。随机生成120个干扰点
这个没有实现。。。

package com.blacklee.servlet;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Random;

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * Servlet implementation class CheckCodeServlet
 */
public class CheckCodeServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
	private static int WIDTH = 60;
	private static int HEIGHT = 20;
    /**
     * @see HttpServlet#HttpServlet()
     */
    public CheckCodeServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		HttpSession  session = request.getSession();
		response.setContentType("image/jpeg");
		ServletOutputStream sos = response .getOutputStream();
		
		//设置浏览器不要缓存图片
		
		response .setHeader("Pragma", "No-cache");
		response.setHeader("Cache-Control", "no-cache");
		response.setDateHeader("Expires", 0);
		
		//创建内存图像  并获得其上下文
		
		BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
		Graphics g = image.getGraphics();
		
		//产生随机的验证码
		
		char[] rands = createCheckCode();
		
		//产生图像
		
		drawBackGround(g);
		drawRands(g,rands);
		
		//结束图像的绘制
		
		g.dispose();
		
		//将图像输出到客户端
		ByteArrayOutputStream bos = new ByteArrayOutputStream() ;
		ImageIO.write(image, "JPEG", bos);
		byte[] buff = bos.toByteArray();
		
		response.setContentLength(buff.length);
		
		//写入到页面的输出流里面去  简单的写可以这样写 bos.writeTo(sos);
		
		sos.write(buff);
		bos.close();
		sos.close();
		//把当前生成的验证码存进session里面去
		session.setAttribute("check_code", new String(rands));
		
		
		
	}

	private void drawRands(Graphics g, char[] rands) {
		// TODO Auto-generated method stub
		g.setColor(Color.BLACK);
		g.setFont(new Font(null, Font.BOLD, 18));
		
		//在不同的高度进行随机数的显示
		g.drawString(""+rands[0], 1, 17);
		g.drawString(""+rands[1], 16, 15);
		g.drawString(""+rands[2], 31, 18);
		g.drawString(""+rands[3], 46, 16);
		
	}

	private void drawBackGround(Graphics g) {
		// TODO Auto-generated method stub
		//画背景
		g.setColor(new Color(0xDCDCDC));
		g.fillRect(0, 0, WIDTH, HEIGHT);
		//随机生成120个干扰点
		
	}

	private char[] createCheckCode() {
		//定义验证码的字符集
		String chars = "0123456789abcdefghigklmnopqrstuvwxyz";
		char[] rands1 = new char[4];
		for(int i = 0 ; i<4 ;i++){
			rands1[i] = chars.charAt(new Random().nextInt(37));
		}
		return rands1;
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}


然后是校验的servlet  LogonServlet
package com.blacklee.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * Servlet implementation class LogonServlet
 */
public class LogonServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public LogonServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		response.setContentType("text/html;charset=utf-8");
		PrintWriter writer = response.getWriter();
		
		HttpSession session = request.getSession(false);
		
		if(session==null){
			writer.println("验证码处理问题!!!!");
			return ;
		}
		String saveCode = (String) session.getAttribute("check_code");
		if(saveCode==null){
			writer.println("验证码处理问题!!!");
			return ;
		}
		String checkCode = request.getParameter("check_code");
		
		if(!saveCode.equals(checkCode)){
			writer.println("验证码错误");
			return ;
		}
		
		session.removeAttribute("check_code");
		writer.println("验证通过服务器正在校验用户名和密码");
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}


程序到了这里大体上就完成了 很简单的一个demo 

2
0
分享到:
评论

相关推荐

    漂亮验证码(jsp版)

    JSP生成随机的验证码图片,Servlet负责验证,Ajax和jQuery提供无刷新的交互体验,共同确保了Web应用的安全性。这种实现方式对于初学者了解Web开发中的关键概念和技术栈,以及在实际项目中应用这些技术,都是很有价值...

    servlet+jsp+javabean+css+javascript

    验证码通常是一串随机生成的字符,用户需要在提交表单前正确输入。在JavaWeb中,可以使用JavaScript生成验证码并在客户端显示,同时在服务器端验证用户的输入是否匹配。 EL(Expression Language)表达式和JSTL...

    jsp彩色文字验证码

    2. **随机数生成**:利用Java的`java.util.Random`类生成随机字符和颜色。我们可以定义一个字符集,然后从中随机选择字符;同样,也可以生成随机颜色代码来给文字上色。 3. **扭曲与噪点**:为了增加机器识别的难度...

    Java写的彩票系统

    3. **业务逻辑**:这部分代码负责处理购彩逻辑,如验证用户的投注、生成随机号码、计算奖金等。对于双色球游戏,其规则包括6个红球和1个篮球,红球范围从1到33,蓝球范围从1到16。Java可以使用随机数生成器来模拟...

    JSP验证码+刷新java

    在JSP中,我们可以使用Java的`java.util.Random`类来生成随机数字或字符,然后通过`java.awt`和`javax.imageio`包中的类来绘制验证码图像。例如,创建一个`BufferedImage`对象,设定其宽度和高度,使用`Graphics2D`...

    kaptcha验证码框架(Java).zip

    2. **配置`web.xml`**:在`&lt;web-app&gt;`标签内添加`KaptchaServlet`的servlet配置,指定生成的验证码图片的URL映射。 3. **创建`KaptchaProducer`实例**:在Java代码中,可以通过`KaptchaFactory`获取`...

    Demo.zip_DEMO

    当用户通过浏览器访问这个页面时,服务器端的JSP代码会被执行,生成一个随机的验证码图像和相应的验证字符串。这个验证码图像会显示在用户界面上,用户需要输入看到的文字或数字以完成验证。 验证码的实现通常涉及...

    JSP编程小技巧-已整理 (例:文件上传,图片验证码,JSP标准动作.....)

    在JSP中,可以结合Servlet和Java图形库(如Java2D)生成随机的字符组合,并将其转化为图片。服务器端会存储这个随机字符串作为用户输入验证的参考,客户端则显示图片并让用户输入看到的验证码。图片的刷新可以通过...

    JavaWeb用户登录功能的实现.doc

    此处的验证码可能通过一个单独的Java类生成,该类可能包含随机字符生成和图片绘制等方法,用户输入的验证码需要与服务器端生成的验证码匹配。 4. **Servlet处理**:在后端,`/UserLogin/Sample1/loginServlet`会被...

    kaptcha 验证码demo,附simplecaptcha

    它提供了基本的验证码功能,包括生成随机文本、添加噪声、扭曲等。 使用SimpleCaptcha的基本流程: 1. 引入SimpleCaptcha库。 2. 创建一个SimpleCaptcha对象,设置长度、宽度、字体等参数。 3. 使用SimpleCaptcha...

    【分享】JSP语音验证码接口demo

    - **实现**:通常包括生成随机验证码、调用第三方语音服务API、播放验证码给用户以及验证用户输入的验证码是否正确。 - **接口设计**:JSP中的接口通常以HTTP请求的方式暴露,通过GET或POST方法接收请求,返回语音...

    SimpleCaptcha验证码组件使用

    它提供了生成随机文本和图像验证码的功能,可以有效地防止机器人或爬虫进行非法操作,如注册、登录等。这款组件以其易用性和灵活性受到开发者的青睐。 首先,我们需要在项目中引入SimpleCaptcha的相关依赖。如果是...

    SpringBoot实现验证码功能

    在该服务中,我们可以使用Hutool的`Captcha`类来生成随机的图形验证码。 ```java import cn.hutool.core.io.IoUtil; import cn.hutool.core.util.RandomUtil; import cn.hutool.image.ImageType; import ...

    ssh标签_关系_验证码源码

    在SSH项目中,通常使用Servlet或JavaServer Pages(JSP)生成随机的图像验证码,并将其与服务器端的一个临时变量关联。客户端提交表单时,服务器会验证输入的验证码是否与服务器端保存的值匹配。如果匹配,则验证...

    jsp有关用到的jar包.rar

    它生成和验证随机图像验证码,以确保用户是人类。 5. **其他实用工具库**:描述中提到了“一些功能可能用的包”,这可能包括Apache Commons、Google Guava等通用的Java工具库,它们提供了许多方便的类和方法,如...

    JSP简单在线考试卷理系统+SQL2000

    7. **动态网页生成**:JSP会将Java代码编译成Servlet,每次请求时,Servlet生成响应内容并返回给客户端,实现了动态网页的生成。 8. **考试功能实现**:可能包括创建和编辑试卷、设置考试时间限制、随机抽题、防...

    第十二节 java附件上传

    - 存储文件时使用随机生成的文件名,防止文件名冲突。 - 对上传的文件进行验证,确保它们是安全的。 综上所述,Java中的文件上传涉及到HTTP协议的理解,Servlet API的使用,以及可能的第三方库的集成。掌握这些...

    基于JSP的在线考试系统

    【基于JSP的在线考试系统】是一个利用JavaServer Pages(JSP)技术构建的Web应用程序,主要用于实现在线考试的功能。这种系统通常包含用户管理、考试发布、试题库管理、考生答题、自动评分以及成绩查询等一系列模块...

    在线考试系统

    3. 试卷生成与发布:系统根据教师设定的参数(如总分、题数、难度等)随机组合题目,生成试卷。试卷可以设置不同的开放时间、考试时长和提交限制。 4. 在线答题:学生在规定时间内登录系统,完成在线答题。系统可能...

Global site tag (gtag.js) - Google Analytics