import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/checkCodeAction/")
public class CheckCode extends HttpServlet {
public CheckCode() {
super();
}
public void destroy() {
super.destroy();
}
public void init() throws ServletException {
super.init();
}
public Color getRandColor(int s, int e) {
Random random = new Random();
if (s > 255) s = 255;
if (e > 255) e = 255;
int r = s + random.nextInt(e - s);
int g = s + random.nextInt(e - s);
int b = s + random.nextInt(e - s);
return new Color(r, g, b);
}
@RequestMapping("service.do")
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//禁止缓存
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "No-cache");
response.setDateHeader("Expires", 0);
// 指定生成的响应是图片
response.setContentType("image/jpeg");
int width = 200;
int height = 60;
BufferedImage image = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB); //创建BufferedImage类的对象
Graphics g = image.getGraphics(); //创建Graphics类的对象
Graphics2D g2d=(Graphics2D)g; //通过Graphics类的对象创建一个Graphics2D类的对象
Random random = new Random(); //实例化一个Random对象
Font mFont = new Font("华文宋体", Font.BOLD, 30); //通过Font构造字体
g.setColor(getRandColor(200, 250)); //改变图形的当前颜色为随机生成的颜色
g.fillRect(0, 0, width , height); //绘制一个填色矩形
//画一条折线
BasicStroke bs=new BasicStroke(2f,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL); //创建一个供画笔选择线条粗细的对象
g2d.setStroke(bs); //改变线条的粗细
g.setColor(Color.DARK_GRAY); //设置当前颜色为预定义颜色中的深灰色
int[] xPoints=new int[3];
int[] yPoints=new int[3];
for(int j=0;j<3;j++){
xPoints[j]=random.nextInt(width - 1);
yPoints[j]=random.nextInt(height - 1);
}
g.drawPolyline(xPoints, yPoints,3);
//生成并输出随机的验证文字
g.setFont(mFont);
String sRand="";
int itmp=0;
for(int i=0;i<4;i++){
if(random.nextInt(2)==1){
itmp=random.nextInt(26)+65; //生成A~Z的字母
}else{
itmp=random.nextInt(10)+48; //生成0~9的数字
}
char ctmp=(char)itmp;
sRand+=String.valueOf(ctmp);
Color color=new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110));
g.setColor(color);
/****随机缩放文字并将文字旋转指定角度**/
//将文字旋转指定角度
Graphics2D g2d_word=(Graphics2D)g;
AffineTransform trans=new AffineTransform();
trans.rotate(random.nextInt(45)*3.14/180,15*i+10,7);
//缩放文字
float scaleSize=random.nextFloat()+0.8f;
if(scaleSize>1.1f) scaleSize=1f;
trans.scale(scaleSize, scaleSize);
g2d_word.setTransform(trans);
/************************/
g.drawString(String.valueOf(ctmp),30*i+40,16);
}
//将生成的验证码保存到Session中
HttpSession session=request.getSession(true);
session.setAttribute("randCheckCode",sRand);
g.dispose();
ImageIO.write(image,"JPEG",response.getOutputStream());
}
}
网上找的 尚未测试仅供参考!
分享到:
相关推荐
用spring mvc实现带有验证码的登录注册功能模块,代码比较完整详细,适合于毕业设计的登录注册功能,可以根据自己的需要进行修改。 个人环境为:eclipse2019、mysql、和tomcat8.5
Spring MVC是Spring框架的一部分,用于处理Web应用程序的请求-响应模型,而Spring Security则是一个强大的安全管理框架,提供了认证和授权功能,帮助开发者保护应用免受恶意攻击。 1. **Spring MVC**: - **核心...
本篇文章将深入探讨如何利用Spring MVC来实现一个登录功能。 1. **Spring MVC简介** Spring MVC通过分离业务逻辑、数据处理和用户界面,使得开发过程更为清晰。它提供了DispatcherServlet作为入口点,处理所有的...
通过以上步骤,我们可以成功地将Spring MVC、Spring和Hibernate整合在一起,实现一个完整的登录功能。这样的实例不仅有助于学习者理解各框架的协同工作方式,而且为实际项目提供了可复用的基础结构。在实践中,还...
在Spring MVC框架中实现短信验证码功能,主要涉及前端与后端的交互以及第三方短信平台的集成。以下将详细讲解这一过程的关键步骤。 首先,我们需要一个短信接口,这通常是通过购买第三方服务来获得的。比如,一些...
在这个“SSM实现登录验证码功能”的项目中,我们将探讨如何在SSM框架下添加验证码功能,以增强用户登录的安全性。 首先,验证码功能的基本目的是防止恶意自动化程序(如机器人或爬虫)进行非法操作,如频繁尝试登录...
9. **测试**:为了确保验证码功能的正确性,我们需要进行单元测试和集成测试,包括验证码生成、会话存储、验证逻辑等各个环节。 通过这个"Spring01_验证码登录功能_"项目,我们可以学习到如何在Spring框架下实现一...
三期答辩课程设计,人事管理系统Mybatis+Spring+Spring MVC框架整合AJAX+JQuery实现登录、注册以及验证码和验证注册用户信息,包括数据库备份,课设说明,答辩PPT,Windows下sts(eclipse) 。
其中,eclipse是主要的开发工具,mybatis是持久层框架,spring是主要的框架,springmvc是基于spring的mvc框架,而kaptcha是验证码生成工具。 在kaptcha的使用方面,本文主要介绍了两种使用方式:方式一是在spring-...
Spring MVC 是一个基于Java的轻量级Web应用框架,它是Spring框架的重要...通过这个实例,初学者可以学习到如何搭建Spring MVC项目、编写Controller、配置视图解析器、实现验证码功能等,从而加深对Spring MVC的理解。
java springmvc实现验证码功能 java springmvc实现验证码功能是指在java web开发中使用springmvc框架来实现验证码功能的过程。验证码是指在用户登录或注册过程中,服务器端生成的一张图片,图片中包含随机字母、...
下面将详细介绍如何在Spring MVC项目中实现验证码功能。 首先,验证码的生成通常涉及到随机数生成和图像处理技术。在Spring项目中,我们可以使用Java的`java.util.Random`类生成一组随机数字或字母,然后通过Java的...
总的来说,SSM框架结合了Spring的依赖注入、Spring MVC的MVC设计模式和MyBatis的简单数据库操作,为开发人员提供了一套高效且灵活的Web开发工具,帮助我们轻松地完成登录和用户列表展示等常见功能。通过深入理解和...
在本文中,我们将深入探讨如何将`patchca`与`Spring MVC`框架进行整合,以实现高效、美观的验证码生成功能。验证码(CAPTCHA)在Web应用中扮演着至关重要的角色,它能有效防止自动化的恶意操作,如机器人注册、垃圾...
在网络安全和反爬虫技术领域,验证码是一种常用的方法,用于防止自动化的机器人程序对网站进行恶意操作,如数据抓取或滥用服务。本资源包针对验证码反爬提供了相关的工具和资料,主要涉及到“超级鹰打码平台”以及...
在这个已经运行成功的Spring MVC框架中,已经实现了登录功能。这通常包括以下步骤: 1. 用户向服务器发送登录请求,请求可能包含用户名和密码。 2. 控制器接收到请求,通过`@RequestParam`获取参数。 3. 使用`@...
在本文中,我们将深入探讨如何使用Spring MVC框架来实现用户注册和登录功能。Spring MVC是Spring框架的一个核心组件,主要用于构建Web应用程序。由于在描述中提到没有涉及Service层和DAO层,我们将主要关注控制器...
在这个"struts2+spring3验证码登录实例"中,验证码功能是一个重要的安全措施,它可以防止恶意的自动登录尝试或机器人攻击。验证码通常由一串随机生成的字符或数字组成,用户需要在输入框中正确输入才能完成登录。...
在这个实例中,我们将深入探讨如何使用Spring MVC、Spring以及JdbcTemplate来实现一个包含注册和登录功能的Web应用。 首先,Spring MVC通过DispatcherServlet作为前端控制器,接收HTTP请求并分发到相应的处理器。在...