`

验证码功能的实现

 
阅读更多

最近,在弄一个微薄类的sns项目,需要用到验证码,记录下。代码如下,主要是在serlet中实现图片生成,跟随机数,然后把随机数同步到session中

package com.ecar.portal.common.servlet;
import java.io.*;
import java.util.*;
import com.sun.image.codec.jpeg.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.awt.*;
import java.awt.image.*;

/**
 * 功能:调用AuthServlet可以生成一个验证码图片,图片的宽度和高度可以自定义
 * 调用格式: /servlet/AuthServlet?width=60&height=20
 *      或者/servlet/AuthServlet
 * 时间:2010-8-6
 *  
 * @author: lyj
 */
public class VerifyServlet extends HttpServlet {
 private Font mFont=new Font("Times New Roman", Font.BOLD,22);//设置字体
 //static String AuthCode="";

// 处理post
 public void doPost(HttpServletRequest request,HttpServletResponse response)
 throws ServletException,IOException {
   doGet(request,response);
 }

 public void doGet(HttpServletRequest request,HttpServletResponse response)
     throws ServletException,IOException {
// 取得一个1000-9999的随机数

    //System.out.println("servlert方法调用"); 
     HttpSession session=request.getSession();//request.getSession(false)当参数为false时,有可能不创建session
	//session.setAttribute("getImg",s);
     response.setContentType("image/gif");
     response.setHeader("Pragma","No-cache");
     response.setHeader("Cache-Control","no-cache");
     response.setDateHeader("Expires", 0);
     int width=60;
     int height=20;
     if(request.getParameter("width")!=null && !request.getParameter("width").equals(""))
      width = Integer.parseInt(request.getParameter("width"));
     if(request.getParameter("height")!=null && !request.getParameter("height").equals(""))
      height = Integer.parseInt(request.getParameter("height"));
                 

     ServletOutputStream out=response.getOutputStream();
     BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB); //设置图片大小的
     Graphics gra=image.getGraphics();
     Random random=new Random();

     gra.setColor(getRandColor(233,244));    //设置背景色
     gra.fillRect(0,0,width,height);

     gra.setColor(Color.black); //设置字体色
     gra.setFont(mFont);


     // 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到
     gra.setColor(getRandColor(160,200));
     for (int i=0;i<150;i++)
     {
      int x = random.nextInt(width);
      int y = random.nextInt(height);
             int xl = random.nextInt(12);
             int yl = random.nextInt(12);
      gra.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; 
        // 将认证码显示到图象中
        gra.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));//调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成
        gra.drawString(rand,13*i+6,18);
    }
        //ystem.out.println("showimage="+sRand);
        //session.setAttribute("getImg",sRand);
        session.setAttribute("AuthCode",sRand);
        
        //AuthCode = sRand;
        //session.putValue("AuthCode",sRand);
        JPEGImageEncoder encoder=JPEGCodec.createJPEGEncoder(out);
        encoder.encode(image);
        //out.flush();

}

  static 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);
         return new Color(r,g,b);
  }
  
  static public String getAuthCode(HttpSession session){//返回验证
   return (String)session.getAttribute("AuthCode");
         
  }
}

 

 

分享到:
评论

相关推荐

    javaweb邮箱发送验证码功能实现

    在JavaWeb开发中,实现邮箱发送验证码功能是常见...总之,JavaWeb中实现邮箱发送验证码功能涉及到配置邮件服务、使用JavaMail API发送邮件以及可能的验证码管理逻辑。确保正确配置并理解这些步骤,就能顺利实现该功能。

    JAVAWEB验证码功能实现附源代码

    本示例提供的源代码是一个简单的JAVAWEB验证码功能实现,它不依赖任何外部jar包,也不涉及JavaScript,全部采用Java后端处理和JSP页面展示。 验证码的实现主要包括以下几个关键步骤: 1. **生成随机验证码**:在...

    SSM实现登录验证码功能

    在这个“SSM实现登录验证码功能”的项目中,我们将探讨如何在SSM框架下添加验证码功能,以增强用户登录的安全性。 首先,验证码功能的基本目的是防止恶意自动化程序(如机器人或爬虫)进行非法操作,如频繁尝试登录...

    手机验证码功能实现demo(含视频教程)

    手机验证码功能实现demo 含代码和视频教程!!!!

    ASP.NET的验证码功能实现

    ASP.NET实现验证码功能的aspx文件,里面包含了三个文件,CreateImage.aspx.cs包含了验证码功能的实现,前端和设计和新建的窗口文件一样没有任何改动,因为功能的实现就是通过一次又一次的加载page_load函数实现功能...

    springboot验证码功能实现

    本资源是基于Spring Boot框架开发的验证码功能模块,旨在为Web应用程序提供可靠的验证码生成和验证服务。该模块提供了多种类型的验证码生成,包括数字、字母、数字字母组合等,同时支持自定义长度和有效期。验证码...

    Java案例之随机验证码功能实现

    实现的功能比较简单,就是随机产生了四个字符然后输出。效果图如下,下面我会详细说一下实现这个功能用到了那些知识点,并且会把 这些知识点详细的介绍出来。哈哈 ,大神勿喷,对于初学Java的人帮助应该蛮大的。嘿嘿...

    Android开发中短信验证码功能实现

    1、本Demo主要是实现Android开发中的短信验证功能。比如用户登录界面上的短信验证。 2、采用的是第三方的免费插件Mod。 3、相关介绍请查看博文:https://blog.csdn.net/lpCrazyBoy/article/details/81014128

    实现验证码功能

    ### 实现验证码功能 在现代网站与应用中,验证码(CAPTCHA)被广泛用于区分真实用户与自动程序,以防止恶意登录、注册等行为。本文将详细介绍如何在Web应用程序中实现验证码功能,包括其基本原理、实现步骤以及一个...

    Java使用SSM框架实现登录页面的验证码功能

    ### Java使用SSM框架实现登录页面的验证码功能 在现代Web开发中,为了增强网站的安全性,防止自动化脚本攻击,通常会在用户登录时加入验证码功能。本文将详细介绍如何使用SSM(Spring、SpringMVC、MyBatis)框架来...

    手机短信验证码实现功能

    需要的快进行下载吧!新建一个Java项目,修改一下包名就可以运行了!

    Java案例之随机验证码功能实现实例

    "Java案例之随机验证码功能实现实例" 该资源主要介绍了Java实现随机验证码功能的实例,通过生成四位不重复的验证码,演示了Java中数组、Random函数和字符串操作的使用。 知识点一:数组 * 数组的定义:在Java中,...

    ASP.NET MVC验证码功能实现代码

    在ASP.NET MVC框架中,验证码功能是用于防止自动机器人或者恶意用户进行非法操作的一种安全机制。...以上就是ASP.NET MVC验证码功能实现的详细解析,这个功能对于任何需要用户验证身份的Web应用都是至关重要的。

    SSM 实现登录验证码功能(附源码)

    SSM 实现登录验证码功能 本文主要介绍了使用 SSM 框架实现登录验证码功能的方法,通过实例代码详细介绍了验证码的实现过程,具有很高的参考价值。 验证码的重要性 验证码是一种常用的安全机制,用于防止机器人和...

    ThinkPHP5.0框架验证码功能实现方法【基于第三方扩展包】

    本文实例讲述了ThinkPHP5.0框架验证码功能实现方法。分享给大家供大家参考,具体如下: 背景 ThinkPHP5.0 已经出现很久了,最近有所接触,下面介绍一下常用的第三方验证码功能的使用。 ♜ 功能开发 1).引入第三方...

    vue+springboot实现的拼图验证码

    演示地址:https://loyer.wang/

    Android验证码的实现

    本篇文章将深入探讨如何在Android平台上实现验证码功能,包括自定义控件的创建和验证码的生成与验证。 首先,验证码的主要目的是防止恶意机器人或自动化脚本进行非法操作,如批量注册、刷票等。在Android应用中,...

    asp.net实现验证码功能

    在这个特定的场景中,我们关注的是如何在ASP.NET中实现验证码功能,这是一种用于验证用户身份的安全机制,通常用于防止自动化程序(如机器人)进行恶意操作。 验证码在网页上通常表现为一串随机生成的图像文字,...

    基于Servlet下的验证码功能的实现

    在网站开发中,验证码无疑是必不可缺的一项功能。这个是简易验证码的实现Demo。

Global site tag (gtag.js) - Google Analytics