最近,在弄一个微薄类的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"); } }
发表评论
-
java的日志处理指南
2016-01-14 15:35 1889Java日志基础 Java使用了一种自定义的、可扩展的方法 ... -
javaWeb开发中ServletContext总结
2015-03-19 00:01 1038WEB容器在启动时,它会为每个WEB应用程序都创建一个对应 ... -
java日志组件介绍(common-logging,log4j,slf4j,logback )
2015-03-17 10:12 977common-logging common-logging ... -
hibernate本地sql(native查询)查询的3种转换方式
2015-03-11 08:51 842在hibernate使用的过程中.我们通常需要对结果进行解释 ... -
hibernate 的查询
2013-12-03 14:58 697QBC (Query By Criteria) 主要有Cri ... -
Linux下jdk安装
2012-02-02 18:04 7061下载需要安装的的jdk文件,放在一个用户指定文件夹中,进 ... -
集群简介(转)
2011-08-26 10:03 820一:集群概念: 1. 两大关键特性 集群是一组协同 ... -
velocity的使用示例(转)
2011-07-28 11:48 1102不少人看过或了解过Velo ... -
java程序中访问url接口
2011-07-06 10:56 4203在多人开发项目中,我们经常要在自己程序内部调用别人的http ... -
JAVA操作COOKIE的总结
2011-06-10 11:52 12221.设置Cookie Cookie cookie = ... -
常用JAVA过滤器用法
2011-06-10 10:32 1421java 代码 一、使浏览器不缓存页面的过滤器 i ... -
Java中cookie和session 1相关应用之2
2011-06-09 15:29 1292十一、session在不同环境下的不同含义 sessio ... -
Java中cookie和session 1相关应用
2011-06-09 15:27 1217一、cookie机制和session机制的区别 具体来 ... -
编写你自己的单点登录(SSO)服务
2011-05-31 20:56 723单点登录(SSO)的技术 ... -
单点登陆(Single Sign On-SSO)
2011-05-31 20:54 1014本文以某新闻单位多媒 ... -
javamail实现登录发送邮件
2011-05-20 16:25 1309[color=darkred][/color]/** ...
相关推荐
需要手动设置发送邮箱地址和email.properties中的发件人邮箱帐号和密码,如果不能发送,请修改邮箱hmtp设置再发送
运行环境:jdk1.8;tomcat 8.0;导入代码后可直接运行。
手机验证码功能实现demo 含代码和视频教程!!!!
ASP.NET实现验证码功能的aspx文件,里面包含了三个文件,CreateImage.aspx.cs包含了验证码功能的实现,前端和设计和新建的窗口文件一样没有任何改动,因为功能的实现就是通过一次又一次的加载page_load函数实现功能...
实现的功能比较简单,就是随机产生了四个字符然后输出。效果图如下,下面我会详细说一下实现这个功能用到了那些知识点,并且会把 这些知识点详细的介绍出来。哈哈 ,大神勿喷,对于初学Java的人帮助应该蛮大的。嘿嘿...
1、本Demo主要是实现Android开发中的短信验证功能。比如用户登录界面上的短信验证。 2、采用的是第三方的免费插件Mod。 3、相关介绍请查看博文:https://blog.csdn.net/lpCrazyBoy/article/details/81014128
非常实现的验证码功能,可以用到项目中去,该源代码无jar包,没有有JavaScript,纯JAVAWEB代码,jsp页面,serlvet显示,简单易懂试用~~~~~
验证码实现步骤,详细的验证码实现步骤,快来学习吧
需要的快进行下载吧!新建一个Java项目,修改一下包名就可以运行了!
Android验证码的功能实现,通过自定义控件实现验证码功能
ssm框架实现验证码登录,不需要配置jar包,不需要配置springMVC文件,直接在前台配置标签和JavaScript,然后在controller中配置三个方法,资料齐全
本文实例讲述了ThinkPHP5.0框架验证码功能实现方法。分享给大家供大家参考,具体如下: 背景 ThinkPHP5.0 已经出现很久了,最近有所接触,下面介绍一下常用的第三方验证码功能的使用。 ♜ 功能开发 1).引入第三方...
演示地址:https://loyer.wang/
jsp servlet实现验证码功能 绝对可用!
本篇文章主要介绍了Java案例之随机验证码功能实现实例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
ASP.NET MVC验证码功能实现代码,需要的朋友可以参考一下
在网站开发中,验证码无疑是必不可缺的一项功能。这个是简易验证码的实现Demo。
主要介绍了Android 验证码功能实现代码的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
html+js+css实现简单验证码功能,与后台技术分离,各种后台语言都能适用
主要介绍了SSM 实现登录验证码功能,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下