package com.zpark.wzy.util;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.util.Random;
import com.sun.image.codec.jpeg.*;
public class SecurityImage {
/**
* 生成验证码图片
* @param securityCode
* @return
*/
public static BufferedImage createImage(String securityCode){
int codeLength = securityCode.length();//验证码长度
int fontSize = 15;//字体大小
int fontWidth = fontSize+1;
//图片宽高
int width = codeLength*fontWidth+6;
int height = fontSize*2+1;
//图片
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D g = image.createGraphics();
g.setColor(Color.WHITE);//设置背景色
g.fillRect(0, 0, width, height);//填充背景
g.setColor(Color.LIGHT_GRAY);//设置边框颜色
g.setFont(new Font("Arial", Font.BOLD, height-2));//边框字体样式
g.drawRect(0, 0, width-1, height-1);//绘制边框
//绘制噪点
Random rand = new Random();
g.setColor(Color.LIGHT_GRAY);
for (int i = 0; i < codeLength*6; i++) {
int x = rand.nextInt(width);
int y = rand.nextInt(height);
g.drawRect(x, y, 1, 1);//绘制1*1大小的矩形
}
//绘制验证码
int codeY = height-10;
g.setColor(new Color(19,148,246));
g.setFont(new Font("Georgia", Font.BOLD, fontSize));
for(int i=0;i<codeLength;i++){
double deg=new Random().nextDouble()*20;
g.rotate(Math.toRadians(deg), i*16+13,codeY-7.5);
g.drawString(String.valueOf(securityCode.charAt(i)), i*16+5, codeY);
g.rotate(Math.toRadians(-deg), i*16+13,codeY-7.5);
}
g.dispose();//关闭资源
return image;
}
/**
* 返回验证码图片的流格式
* @param securityCode
* @return
*/
public static ByteArrayInputStream getImageAsInputStream(String securityCode){
BufferedImage image = createImage(securityCode);
return convertImageToStream(image);
}
/**
* 将BufferedImage转换成ByteArrayinputStream
* @param image
* @return
*/
public static ByteArrayInputStream convertImageToStream(BufferedImage image){
ByteArrayInputStream inputStream = null;
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(outStream);
try {
encoder.encode(image);
byte[] b = outStream.toByteArray();
inputStream = new ByteArrayInputStream(b);
} catch (Exception e) {
}
return inputStream;
}
}
在IT行业中,SSH整合是Java Web开发中常见的一种框架集成方式,它涵盖了Spring、Hibernate和Struts2这三个组件。SSH整合旨在提供一个高效、灵活且易于管理的开发环境,使得开发者能够更便捷地构建企业级应用。在这个"验证码登陆(SSH初级整合)"的项目中,我们将探讨如何将这三个框架结合在一起,实现一个带有验证码功能的登录系统。 1. Spring框架:Spring作为核心的依赖注入(DI)和面向切面编程(AOP)框架,负责管理和协调各个组件之间的交互。在验证码登录场景中,Spring可以用来配置服务层bean,处理业务逻辑,并通过AOP来实现跨切面的验证功能,如验证码的有效性检查。 2. Hibernate框架:Hibernate是Java中的持久化框架,用于处理数据库操作。在这个项目中,它可能用于用户账户信息的存储和检索,包括创建、更新、删除和查询。通过Hibernate,开发者可以编写简洁的ORM(对象关系映射)代码,减少与SQL的直接交互,提高开发效率。 3. Struts2框架:Struts2作为MVC(模型-视图-控制器)框架,负责控制应用程序的流程。在登录过程中,Struts2接收用户的请求,调用相应的Action类进行处理,之后返回结果给用户界面。验证码的生成和验证可以通过自定义Action或拦截器实现,确保用户输入的验证码与服务器生成的一致。 4. 验证码技术:验证码的主要目的是防止自动化脚本或机器人对系统的非法访问。在这个项目中,验证码可能是通过随机算法生成的一串字符或图像,用户需要正确输入才能完成登录。生成验证码的过程涉及加密和安全,而验证过程则需要比较用户输入与服务器保存的原始验证码是否匹配。 5. SSH整合的步骤:需要在项目中引入这三个框架的依赖库;然后,配置Struts2的配置文件(struts.xml),定义Action和结果;接着,配置Spring的IoC容器(如applicationContext.xml),声明和管理bean;配置Hibernate的实体类和数据源,以便进行数据库操作。 6. 开发实践:在实际开发中,可能需要创建一个独立的服务类来处理验证码的生成和验证,这个服务类可以通过Spring的依赖注入注入到Struts2的Action中。同时,为了用户体验,验证码的展示和验证应当做到实时和高效,例如使用AJAX技术进行异步验证。 通过SSH整合实现验证码登录,不仅可以提升系统的安全性,还可以为开发者提供一套完整的解决方案,方便进行业务逻辑处理和用户界面交互。对于初学者来说,这个项目是一个很好的学习实践,能够帮助他们深入理解这些流行框架的协同工作方式。

















































































































- 1
- 2

- #完美解决问题
- #运行顺畅
- #内容详尽
- #全网独家
- #注释完整
- Tzu12017-06-13看不清点击后没反应

- 粉丝: 65
- 资源: 14
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助



最新资源
- DAMA-CDMP错题集.docx【数据管理与治理】DAMA-CDMP错题集解析:涵盖数据架构、数据建模、数据安全等多领域知识点
- 基于S7-300 PLC与组态王的锅炉燃烧控制系统设计及应用
- 基于Java的线上会议管理系统
- 基于S7-200 PLC与组态王的火车道口控制系统设计与实现
- 基于MATLAB与CPLEX的冷热电多微网系统双层优化配置研究及其实现
- 基于LabVIEW的视觉开发模块实现手势识别虚拟按键系统
- 瑞数:应用数据安全解决方案.pdf
- COMSOL中表面等离激元(SPP)的建模与激发:色散曲线绘制及仿真技巧
- 国产M0核风机量产程序及FOC电机控制开发方案详解
- BLDC电机双闭环控制系统中霍尔传感器处理及换相逻辑的代码实现
- 基于MATLAB Simulink的无刷直流电机(BLDC)数学模型构建与代码生成
- 2019年研究生数学建模大赛内容及优秀论文.rar
- 电力系统最优潮流控制的Python实现:五节点与十四节点系统的成本最小化分析
- 毕设新作-基于YOLOv5+sort跟踪算法结合Transformer模型实现未来交通预测(含源码+模型+详细运行教程)车流量、车速、车密度特征提取.zip
- 基于Java的志愿者服务平台
- 基于FPGA的全桥逆变SPWM调制技术详解与实现


