`
hawkist
  • 浏览: 35952 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

构建基于maven的综合项目(五)--验证码

阅读更多
一、常用注册验证码
    1、servlet(需要配web.xml)或controller(需要配springMVC.xml)
package com.cpkf.notpad.controller.commonController;

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.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
/**  
 * Filename:    VisualCodeController.java
 * Description: 验证码控制器
 * Company:     
 * @author:     Jiang.hu
 * @version:    1.0
 * Create at:   May 30, 2011 4:00:17 PM
 * modified:    
 */
@Controller
public class VisualCodeController {
	@RequestMapping(value="visualCode.do",method={RequestMethod.GET,RequestMethod.POST})
	public void getVisualCode(HttpServletRequest request,HttpServletResponse response){
		//设定图片长宽
		int width = 68;
		int height = 22;
		BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_3BYTE_BGR);
		//得到缓冲区Graphics对象
		Graphics graphics = img.getGraphics();
		//画背景,颜色浅
		graphics.setColor(getRandColor(200, 250));
		graphics.fillRect(0, 0, width, height);
		//画边框
		graphics.setColor(getRandColor(0, 255));
		graphics.drawRect(0, 0, width - 1, height - 1);
		//随机产生两条干扰线
		graphics.setColor(getRandColor(160, 200));
		Random random = new Random();
		for(int i = 0;i < 2;i ++){
			int x = random.nextInt(width);
			int y = random.nextInt(height);
			int x1 = random.nextInt(width);
			int y1 = random.nextInt(height);
			graphics.drawLine(x, y, x1, y1);
		}
		//随机产生几个点
		graphics.setColor(getRandColor(160, 200));
		for(int i = 0;i < 10;i ++){
			int x = random.nextInt(width);
			int y = random.nextInt(height);
			graphics.drawLine(x, y, x, y);
		}
		//随机产生四个字符,并设置其颜色、字体、大小以及位置
		Font font = new Font("Times New Roman",Font.ITALIC | Font.BOLD, 22);
		StringBuffer sb = new StringBuffer();
		char[] ch = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".toCharArray();
		int index,length = ch.length;
		for(int i = 0;i < 4;i ++){
			index = random.nextInt(length);
			graphics.setColor(getRandColor(20, 130));
			graphics.setFont(font);
			graphics.drawString("" + ch[index], (i * 15) + 3, 18);
			sb.append(ch[index]);
		}
		//字符串放入session
		request.getSession().setAttribute("checkCode", sb.toString());
		//生成图片
		graphics.dispose();
		//禁止图像缓存
		response.setHeader("Pragma", "No-cache");
		response.setHeader("Cache-Control", "No-cache");
		response.setDateHeader("Expires", 0);
		response.setContentType("image/jpeg");
		//创建二进制输出流并输出
		ServletOutputStream sos = null;
		try {
			sos = response.getOutputStream();
			ImageIO.write(img, "jpeg", sos);
			sos.flush();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if(sos != null){
				try {
					sos.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
	public Color getRandColor(int lower,int upper){
		Random random = new Random();
		lower = lower > 255 ? 255 : lower;
		lower = lower < 1 ? 1 : lower;
		upper = upper > 255 ? 255 : upper;
		upper = upper < 1 ? 1 : upper;
		if(lower > upper){
			int temp = upper;
			upper = lower;
			lower = temp;
		}
		int r = lower + random.nextInt(upper - lower);
		int g = lower + random.nextInt(upper - lower);
		int b = lower + random.nextInt(upper - lower);;
		return new Color(r, g, b);
	}
}

    2、jsp
<img id="visualCode" alt="visualCode" src="<c:url value='/visualCode.do'/>">
						<a href="javascript:reloadVerifyCode();"><spring:message code="message.account.visualCode.notClear"/></a>

    3、js
/*
 * 改变图片链接,如果自己构造url,需要在页面添加base属性,动态添加前缀
 * 用下面的方式可以自动保存前缀
 * */
function reloadVerifyCode(){
	var imgSrc = $("#visualCode");
	var src = imgSrc.attr("src");
	imgSrc.attr("src",changeUrl(src));
}
function changeUrl(url){
	var timeNow = new Date().getTime();
	if((url.indexOf("?")) >= 0){
		url = url.substring(0,url.indexOf("=") + 1);
		url = url + timeNow;
	} else {
		url = url + "?time=" + timeNow;
	}
	return url;
}
分享到:
评论

相关推荐

    maven:maven项目练手,《maven实战》里的例子,验证码的生成和测试

    Maven 使用一种基于项目对象模型(Project Object Model,POM)的概念,通过 POM 文件来管理项目的配置、依赖关系、构建过程等。这使得开发者可以专注于编写代码,而不需要花费大量时间在构建配置上。 ** Maven 的...

    Maven+SSM+Shiro框架整合完整实现,实现某权限用户登录,记住密码,验证码等功能。

    **Maven** 是一个项目管理和综合工具,它帮助开发者管理项目依赖,构建项目,并提供了统一的构建过程。在本项目中,Maven通过其配置文件pom.xml管理所有相关的库依赖,如Spring、SpringMVC、MyBatis和Shiro等。 **...

    爱旅行项目.zip(基于ssm+maven多模块开发写的)

    《爱旅行项目》是一个基于SSM(Spring、SpringMVC、MyBatis)和Maven多模块架构开发的旅游服务应用程序。该项目旨在提供一个全面的旅游服务平台,涵盖了从信息浏览、预订服务到支付结算等一系列功能。以下是项目中...

    基于java写的验证码生成项目,支持gif,png,两种格式,低代码开发。支持更换验证码内容,设置干扰线,设置干扰圆,扭曲效果。

    Maven是一个项目管理和综合工具,通过`pom.xml`配置文件管理项目的依赖关系,构建过程和插件等。 9. **IDE支持**: `.idea`目录的存在表明该项目可能是在IntelliJ IDEA这样的集成开发环境中创建的,IDE提供了代码...

    基于servlet的登陆验证并实现增删改查、验证码等功能

    总之,这个基于Servlet的项目是一个综合性的Web应用实例,涵盖了用户认证、数据操作和安全防护等多个关键点。对于初学者来说,这是一个很好的实践平台,可以加深对Servlet和Web开发的理解。而对于经验丰富的开发者,...

    基于SpingBoot+Vue的软考在线培训系统源码(高分毕设).zip

    | Maven | 项目构建管理 | 3.6.0+ | | alibaba Druid | 数据库连接池 | 1.2.6 | | MySQL | 数据库 | 5.6+ | | com.github.pagehelper | 分页插件 | 1.3.1 | | com.alibaba.fastjson | 数据解析工具 | 1.2.76 | | ...

    基于SSM(Sping+Spring MVC+MyBatis)框架的校园宽带业务管理系统.zip

    - 项目构建管理工具:maven; - 前端页面框架:[layui 2.4.x](https://layui.com/)、[layuicms 2.0](http://layuicms.com/)、[dtree](https://fly.layui.com/extend/dtree/)、[echarts]...

    [SSH+Maven+Bootstrap视频教程]_第 三十 讲.zip

    在本节 "[SSH+Maven+...通过学习SSH的认证与授权机制、Maven的项目管理技巧以及Bootstrap的界面设计,你将能够构建出既安全又美观的Java Web应用。这节课的内容对任何希望在Java Web领域深化理解的开发者都极具价值。

    旅游管理项目全部源码.rar

    本项目以"旅游管理"为主题,通过集成开发环境IntelliJ IDEA(简称IDEA)创建了一个基于Maven构建的Java Web应用。项目旨在实现旅游平台的基本功能,如用户登录、注册、浏览分类、以及搜索等服务。在此过程中,我们...

    javaweb+基于SSM框架+mysql构建的企业级电商系统源码.zip

    这是一个基于JavaWeb技术,利用SSM(Spring、SpringMVC、MyBatis)框架和MySQL数据库构建的企业级电商系统源码。在这个项目中,开发者采用了经典的三层架构模式,包括表现层(Presentation Layer)、业务逻辑层...

    基于ssm的民宿预定管理系统 Javaee项目,ssm项目

    - **Maven**:项目构建工具,管理依赖关系。 - **MySQL**:作为关系型数据库,存储系统数据。 - **Eclipse/IntelliJ IDEA**:作为开发IDE,提供代码编写和调试环境。 - **Git**:版本控制工具,协同开发和版本管理。...

    基于springboot藏区特产销售平台.zip

    【标题】:“基于SpringBoot的藏区特产销售平台”是一个使用Java技术和SpringBoot框架构建的电子商务项目,旨在为藏区的特色产品提供一个在线销售的平台。该项目可能涵盖了商品管理、订单处理、用户交互以及支付集成...

    基于MVC的宠物商店前台加后台

    在开发过程中,开发者可能会使用IDE(如Eclipse或IntelliJ IDEA)进行编码,使用版本控制系统(如Git)管理代码,使用Maven或Gradle构建项目,并通过Tomcat或Jetty等应用服务器运行和部署应用。此外,单元测试和集成...

    基于java的BBS系统源码

    - **自动化构建**:通过Maven或Gradle自动构建项目,生成可部署的WAR或JAR文件。 - **容器化部署**:利用Docker将应用打包成容器,方便在不同环境中快速部署。 通过以上分析,我们可以看到Java BBS系统是一个涵盖...

    毕业设计 Java web项目源码整合开发ssm javaWeb传智播客网上书城项目源码(设计以及实现论文)

    - **Maven**:项目构建工具,管理依赖关系。 - **MySQL**:数据库系统,存储用户信息、图书数据、订单数据等。 - **Eclipse/IntelliJ IDEA**:Java开发IDE,辅助编码和调试。 - **Tomcat**:应用服务器,部署和运行...

    基于ssm的电影订票互动系统.zip

    - 使用Maven或Gradle作为项目构建工具,管理依赖。 - 后端开发涉及Spring的AOP、DI特性,以及SpringMVC的Controller、Service、DAO层设计。 - MyBatis的XML配置文件或注解方式定义SQL语句。 - JSON格式进行前后端...

    JavaWeb登录注册页面

    同时,该项目采用了MyBatis作为持久层框架,Maven作为项目构建工具,确保了代码的组织有序和开发效率。 验证码生成与验证是防止恶意自动化脚本攻击的重要手段。通常,服务器端会生成一串随机字符串或图像,并将其...

    mvn+redis实现商城秒杀项目

    `Mvn`是Apache Maven的缩写,是一个项目管理和综合工具,主要用于Java项目,它管理依赖关系、构建生命周期以及提供了一套统一的构建过程。而`Redis`则是一款高性能的键值存储系统,常用于缓存、消息队列和分布式计数...

    基于ssm+vue智能交互式在线网上花店.zip

    该项目名为“基于ssm+vue智能交互式在线网上花店”,是一个综合性的电子商务平台,集成了后端的SSM框架(Spring、SpringMVC、MyBatis)与前端的Vue.js技术,旨在提供一个智能化、交互性强的线上购物体验。...

    specrunner-core-1.4.21.zip

    4. **测试框架**:SpecRunner是用于Scala的测试运行器,它可以集成到Sbt或Maven等构建工具中,自动运行测试用例并报告结果。 5. **开源软件**:开源项目鼓励协作和共享,但同时也可能面临维护问题。用户在使用时...

Global site tag (gtag.js) - Google Analytics