java web中图片验证码功能的简单实现方法

用户在注册网站信息的时候基本上都要数据验证码验证。那么图片验证码功能该如何实现呢?

大概步骤是:

1.在内存中创建缓存图片

2.设置背景色

3.画边框

4.写字母

5.绘制干扰信息

6.图片输出

废话不多说,直接上代码

package com.lsgjzhuwei.servlet.response;

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

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class VerificationCode
 */
@WebServlet(asyncSupported = true, urlPatterns = { "/VerificationCode" })
public class VerificationCode extends HttpServlet {
	private static final long serialVersionUID = 1L;

  /**
   * @see HttpServlet#HttpServlet()
   */
  public VerificationCode() {
    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

		int width = 120;
		int height = 30;

		//创建一张内存中的缓存图片
		BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

		///背景色
		//通过graphics绘制图像
		Graphics graphics = bufferedImage.getGraphics();
		//设置颜色
		graphics.setColor(Color.yellow);
		//填充
		graphics.fillRect(0, 0, width, height);

		///画边框
		graphics.setColor(Color.blue);
		graphics.drawRect(0, 0, width-1, height-1);

		//写字母
		String content = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcedfghijklmnopqrstuvwxyz1234567890";
		Random random = new Random();
		//设置字体颜色
		graphics.setColor(Color.red);
		//设置字体及大小
		graphics.setFont(new Font("宋体", Font.BOLD, 20));
		int x=20;
		int y=20;
		for(int i = 0; i < 4; i++)
		{
			int index = random.nextInt(content.length());
			char letter = content.charAt(index);
			graphics.drawString(letter+" ", x, y);
			x = x+20;
		}

		//绘制干扰线
		int x1;
		int x2;
		int y1;
		int y2;
		graphics.setColor(Color.LIGHT_GRAY);
		for(int i = 0;i <50;i++)
		{
			x1=random.nextInt(width);
			x2=random.nextInt(width);
			y1=random.nextInt(height);
			y2=random.nextInt(height);
			graphics.drawLine(x1, y1, x2, y2);
		}

		//将图片输出到浏览器
		//将内存的图片通过浏览器输出流输出成jpg图片
		ImageIO.write(bufferedImage, "jpg", response.getOutputStream());

	}

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

}

以上这篇java web中图片验证码功能的简单实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

时间: 2016-06-18

Java Web项目中验证码功能的制作攻略

一.前言 在表单页面中使用验证码的好处在于有效防止用户恶意提交表单,或者使用外挂非法攻击系统. 二.准备条件 1.一个普通的web项目 webProject: 2.一个web服务器 Tomcat. 三.实现思路: 1.自定义一个servlet  VerifyCodeServlet 画一个包含验证字符的验证码图片,这里的图片需要使用Graphics2D手动去画: 2.在具体页面使用img标签的src引用这个servlet即可显示servlet: 3.因为画图的时候把验证码信息放入了session,

Javaweb开发中通过Servlet生成验证码图片

一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedImage类,如下: 创建一个DrawImage Servlet,用来生成验证码图片 package gacl.response.study; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.image.BufferedImage; i

Web制作验证码功能实例代码

web开发中,经常会使用验证码功能,例如登录.注册,或其他关键功能之前经常会使用.合理使用 验证功能可以防止ddos攻击.爬虫攻击等.   实现效果:   实现原理: 由后台提供生成验证码的接口,前端每次请求会后端会生成验证码图片和验证码,验证码图片发送到客户端供客户端显示, 验证码字符串保存再后端的Session中,待前端再次请求业务接口与session里的验证码字符串做比对.    实现思路: 1.先由后端提供可以生产验证码图片的接口 2.前端通过 img 中设置 src 属性,请求验证码生

node.js WEB开发中图片验证码的实现方法

用node做web开发很多都可能碰到需要验证码的地方,之前在github上搜索,有一些比如node-captcha等的类库,都需要依赖第三方的图形处理库或者软件,像我之前安装cario这个图形库时,真是费了好大一番劲,但是其实我们只用到了这些图形库的一点点小功能,比如图片的尺寸修改裁剪,或者生产验证码. 先介绍一下CImg这个c++的图形库吧,CImg是一个跨平台的C++的图像处理库,提供了加载.处理.显示.保存等一系列功能,最吸引人的地方是整个图形库就一个CImg.h这个文件,所以非常的便携绿

Java Web开发之图形验证码的生成与使用方法

本文实例讲述了Java Web开发之图形验证码的生成与使用方法.分享给大家供大家参考.具体如下: 图形验证码的主要目的是为了增强的安全性,增加用户通过遍历所有可能性来破解密码的难度. 图形验证码的使用包括如下3部分: ① 图形验证码的生成: ② 在页面中的使用: ③ 验证: 1.图形验证码的生成 假设在Servlet生成图形验证码,在JavaBean或者JSP中生成的基本过程是相同的.设计如下过程: ① 设置响应的文档类型: ② 生成随机码: ③ 把随机码保存到session中: ④ 生成图片:

.Net Core 下使用ZKWeb.System.Drawing实现验证码功能(图形验证码)

本文介绍.Net Core下用第三方ZKWeb.System.Drawing实现验证码功能. 通过测试的系统: Windows 8.1 64bit Ubuntu Server 16.04 LTS 64bit Fedora 24 64bit CentOS 7.2 64bit 可以实现以下功能: Open jpg, bmp, ico, png Save jpg, bmp, ico, png Resize image Draw graphics with brush and pen Open font

详解c# .net core 下的网络请求

本文章是在VS2017的环境下,.net core 1.1版本以上. 在这期间,由于.net core 并不基于IIS,我们的过去的网络请求代码在.net core框架下,有可能会出现不兼容,报错的现象.这里大致介绍下在.net core 下如何进行http请求,主要仍然是GET和POST方法,有错误的地方,欢迎指正! 先来说POST,POST我实现了三种方法,前两种基于的原理是完全一致的,后面的有些小小的差异,但他们的本质都是http请求,本质上是无区别的,只是实现方法有所不同. 废话不多说,

.Net core下直接执行SQL语句并生成DataTable的实现方法

.net core可以执行SQL语句,但是只能生成强类型的返回结果.例如var blogs = context.Blogs.FromSql("SELECT * FROM dbo.Blogs").ToList().而不允许返回DataSet.DataTable等弱类型.可能由于这个原因没有实现在.net core中DataTable,然而DataTable还是可能会用到的.我们这里就有一个数据仓库的需求,允许用户自行编写类似SQL语句,然后执行,以表格展示.因为语句是千变万化的,因此我也

将字符串转换成System.Drawing.Color类型的方法

1.Color.FromArgb(120,243,244,247) 先将F3,F4,F7转化为十进制数,再调用以上方法.2.把F3 F4 F7转成10进制     然后用 Color.FromArgb3.Color yourColor = Color.FromName("#F3F4F7");4.比较笨一点的办法:     string a="#F3F4F7";     new System.Drawing.Color.fromArgb(          Syste

c#遍历System.drawing.Color下面的所有颜色以及名称以查看

面试的时候被问到,如何遍历System.drawing.Color下面的所有颜色以及名称以查看,当时答得不好,现将方案记录如下: 复制代码 代码如下: View Code      public partial class Form1 : Form     {         FlowLayoutPanel newPanel = new FlowLayoutPanel(); public Form1()         {             InitializeComponent();  

使用MUI框架模拟手机端的下拉刷新和上拉加载功能

mui框架基于htm5plus的XMLHttpRequest,封装了常用的Ajax函数,支持GET.POST请求方式,支持返回json.xml.html.text.script数据类型: 本着极简的设计原则,mui提供了mui.ajax方法,并在mui.ajax方法基础上,进一步简化出最常用的mui.get().mui.getJSON().mui.post()三个方法. 套用mui官方文档的一句话:"开发者只需关心业务逻辑,实现加载更多数据即可".真的是不错的框架. 想更多的了解这个框

Linux XAMPP下启用WordPress的自定义文件名(伪静态)功能

Linux XAMPP下启用WordPress的自定义文件名(伪静态)功能 在安装好WORDPRESS后,想启用伪静态的功能,一个是为了好看,另外也是为了更好的SEO,按照大家的配置方式,只需要将如下内容放到根目录的.htaccess文件中就可以实现伪静态的功能了: RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQU

linux下使用Apache+php实现留言板功能的网站

一.首先我们的linux服务器上要安装Apache和php php的安装方法和Apache方法如同一辙 请参考:http://www.jb51.net/article/94494.htm 二.关闭防火墙服务,关闭selinux 请参考:http://www.cnblogs.com/dagege/p/5947251.html 三.我们通过FTP服务或使用rz命令将文件放到Apache的根目录下 /var/www/html 示例文件下载:http://files.cnblogs.com/files/

ui组件之input多选下拉实现方法(带有搜索功能)

我的风格,先上效果图,如果大家感觉还不错,请参考实现代码. 废话不说 先看div层次结构 <!-- 最外层div 可以任意指定 主要用于定义子元素宽度 --> <div class="col-xs-10" style="width:800px"> <!-- 表单label 添加文字提示 --> <label for="" class="label-control">全文检索<

Android使用PullToRefresh完成ListView下拉刷新和左滑删除功能

ListView下刷新刷功能相信从事Android开发的猿友们并不陌生,包括现在Google亲儿子SwipeRefreshLayout实现效果在一些APP上也能看见(不过个人不喜欢官方的刷新效果).本文就带领一些刚入门android的朋友或者一起爱分享的朋友来简单的实现ListView的下拉刷新和左滑删除效果. 一.本文主要内容: 使用PullToRefresh完成ListView下拉.上拉刷新: 扩展PullToRefresh完美的实现ListView左滑删除效果: 注意:本文中的PullTo