`
esffor
  • 浏览: 1353371 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

最简单的Servlet实现验证码

阅读更多

     现在有不少网站在用户填写表单时,同时要求填写验证码,验证码的一个目的就是防范一些恶意的网站下载软件,这些软件能通过遍历链接而将网站的所有网页下载。还可以防止用户不经过本网站的页面而使用网站的资源。所以现在有不少网站都使用了验证码技术,验证码通常是一个在WEB服务器上生成的随机字符串,同时以某种方式保存起来,比如保存到与当前的Session中,然后在用户提交网页时与用户输入的验证比较是否一致,然而如果直接以明文的方式,还是不能防范一些功能较强的自动填写表格的软件。所以一般将验证码以图片的形式显示出来,同时可以将在图片中显示的字符串进行一些处理,比如使用旋转字符,添加背景纹理等技术以增大被软件识别的难度。下面简要介绍一下如果实现这种验证码:首先实现一个servlet用来生成图片(当然也可以用jsp实现): 

 

package untitled7;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
import com.sun.image.codec.jpeg.*;
import java.awt.*;
import com.sun.image.codec.jpeg.*;
import java.awt.image.BufferedImage;
import java.awt.image.DataBuffer;
import java.awt.geom.GeneralPath;
import javax.swing.*;
import java.math.*;
public class Servlet1
        
extends HttpServlet ...{
//Process the HTTP Get request
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws
            ServletException, IOException 
...{
        response.setContentType(request.getContentType());
        response.setContentType(
"image/jpeg"); //必须设置ContentType为image/jpeg
        int length = 4//设置默认生成4个数字
        Date d = new Date();
        
long lseed = d.getTime();
        java.util.Random r 
= new Random(lseed); //设置随机种子
        if (request.getParameter("length"!= null...{
            
try ...{
                length 
= Integer.parseInt(request.getParameter("length"));
            }

            
catch (NumberFormatException e) ...{
            }

        }

        StringBuffer str 
= new StringBuffer();
        
for (int i = 0; i < length; i++...{
            str.append(r.nextInt(
9)); //生成随机数字
        }

//可以在此加入保存验证码的代码
//创建内存图像
        BufferedImage bi = new BufferedImage(4016, BufferedImage.TYPE_INT_RGB);
        Graphics2D g 
= bi.createGraphics();
        g.clearRect(
001640);
        g.setColor(Color.RED);
        g.drawString(str.toString(), 
412);
        
try ...{
//使用JPEG编码,输出到response的输出流
            JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(response.
                    getOutputStream());
            JPEGEncodeParam param 
= encoder.getDefaultJPEGEncodeParam(bi);
            param.setQuality(
1.0ffalse);
            encoder.setJPEGEncodeParam(param);
            encoder.encode(bi);
        }

        
catch (Exception ex) ...{
        }

    }

}


 

然后在需求显示验证码的加入以下代码就可以了

<img alt="" src="/WebModule1/servlet1" width="40" height="16"/>



分享到:
评论

相关推荐

    servlet实现简单登录验证

    servlet实现简单登录验证,最简单的实现,通过equals()方法然后重定向,主要是理解servlet的运行机制

    页面显示验证码

    一个最简单的验证码实现程序,主要使用JSP+Servlet技术实现,目前只能将验证码在页面中显示出来,如需投入使用还需要继续开发。

    使用Servlet写的增删改查项目

    大三实训课所写项目,基于Servlet编写,有最基础的增删改查功能,以及登录验证,验证码,cookies等,适合新手练习学习参考,代码简单易懂

    DormitoryManager.rar

    功能实现:验证码实现及登录功能设计。登录后的主页设计及拦截器功能实现。数据库链接操作实现,管理员登录功能。注销登录、学生信息管理界面设计。学生信息的添加功能。利用泛型和反射机制实现添加操作的抽象封装....

    JSP开发之生成图片验证码技术的详解

    1.底层用Java实现生成验证码图片 2.通过配置文件调用实现Java生成片 3.通过HTML技术把图片显示到网页 首先是最底层Java生成图片代码 package cn.hncu.servlets; import java.awt.Color; import java.awt.Font; ...

    Java案例开发锦集

    案例4 利用Java API发送E-mail 案例5 从Mail Server删除一条消息 案例6 在Java程序中实现FTP的功能 案例7 一个最简单的聊天程序 案例8 代理服务器的实现 第十章 Java综合实例 案例1 用Java...

    《Java-Web应用开发基础》教学课件08课程设计实例.pptx

    能够在MyEclipse IDE中设计简单的Servlet过滤器。 能够综合运用前面7个模块所学的知识进行Java Web项目开发,能够把前端开发技术运用到项目的开发过程中。 《Java-Web应用开发基础》教学课件08课程设计实例全文共73...

    韩顺平sevlet,jsp视频教程知识点.txt

    视频描述: (-) servlet体系结构的介绍(二) servlet的网络拓扑结构(三) servlet的几个实例(四) servlet的生命周期(五) 一个简单的用户登录系统 韩顺平 j2ee视频实战教程servlet第2讲(下集).wmv 视频描述-) servlet...

    java开源包3

    public class JVMine extends java.applet.Applet 简单实现!~ 网页表格组件 GWT Advanced Table GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag...

    java开源包4

    public class JVMine extends java.applet.Applet 简单实现!~ 网页表格组件 GWT Advanced Table GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag...

    java开源包8

    public class JVMine extends java.applet.Applet 简单实现!~ 网页表格组件 GWT Advanced Table GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag...

    java开源包1

    public class JVMine extends java.applet.Applet 简单实现!~ 网页表格组件 GWT Advanced Table GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag...

    java开源包11

    public class JVMine extends java.applet.Applet 简单实现!~ 网页表格组件 GWT Advanced Table GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag...

    java开源包2

    public class JVMine extends java.applet.Applet 简单实现!~ 网页表格组件 GWT Advanced Table GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag...

    java开源包6

    public class JVMine extends java.applet.Applet 简单实现!~ 网页表格组件 GWT Advanced Table GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag...

    java开源包5

    public class JVMine extends java.applet.Applet 简单实现!~ 网页表格组件 GWT Advanced Table GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag...

    java开源包10

    public class JVMine extends java.applet.Applet 简单实现!~ 网页表格组件 GWT Advanced Table GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag...

    java开源包7

    public class JVMine extends java.applet.Applet 简单实现!~ 网页表格组件 GWT Advanced Table GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag...

    java开源包9

    public class JVMine extends java.applet.Applet 简单实现!~ 网页表格组件 GWT Advanced Table GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag...

    java开源包101

    public class JVMine extends java.applet.Applet 简单实现!~ 网页表格组件 GWT Advanced Table GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag...

Global site tag (gtag.js) - Google Analytics