struts2 的Action类
ValidateImgAction.javajava 代码
-
packagecn.gx80.control.action.basic;
-
-
importjava.io.ByteArrayInputStream;
-
importjava.io.ByteArrayOutputStream;
-
importjava.io.IOException;
-
importjava.util.Map;
-
-
importorg.apache.struts2.interceptor.SessionAware;
-
-
importcn.gx80.service.util.ValidateImageService;
-
importcn.gx80.util.Key;
-
-
-
-
-
-
-
@SuppressWarnings("unchecked")
-
publicclassValidateImgActionextendsStreamBasicActionimplementsSessionAware{
-
-
privatestaticfinallongserialVersionUID=6894525175454169331L;
-
-
privatestaticfinalStringDefault_ValidateCode="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
-
-
privateMapsession;
-
-
privateintwidth;
-
privateintheight;
-
privateintfontSize;
-
privateintcodeLength;
-
-
privateValidateImageServicevalidateImageService;
-
-
-
publicValidateImgAction(){
-
this.contentType="image/jpeg";
-
width=80;
-
height=20;
-
fontSize=16;
-
codeLength=4;
-
}
-
-
publicvoidsetSession(Mapsession){
-
this.session=session;
-
}
-
-
-
publicvoidsetWidth(intwidth){
-
this.width=width;
-
}
-
-
publicvoidsetHeight(intheight){
-
this.height=height;
-
}
-
-
-
publicvoidsetFontSize(intfontSize){
-
this.fontSize=fontSize;
-
}
-
-
publicvoidsetCodeLength(intcodeLength){
-
this.codeLength=codeLength;
-
}
-
-
publicvoidsetValidateImageService(ValidateImageServicevalidateImageService){
-
this.validateImageService=validateImageService;
-
}
-
-
publicStringexecute()throwsException{
-
session.put(Key.ValidateCodeByLogin,createInputStream(ValidateImageService.Disturb_Type_Simple));
-
returnSUCCESS;
-
}
-
-
-
privateStringcreateInputStream(intdisturbType)throwsIOException{
-
ByteArrayOutputStreambos=newByteArrayOutputStream();
-
StringvalidateCode=null;
-
validateCode=validateImageService.createValidateCode(disturbType,fontSize,bos,width,height,getText("System.validateCode",Default_ValidateCode),codeLength);
-
inputStream=newByteArrayInputStream(bos.toByteArray());
-
bos.close();
-
returnvalidateCode;
-
}
-
}
验证码生成接口 ValidateImageService.java
java 代码
-
packagecn.gx80.service.util;
-
-
importjava.io.ByteArrayOutputStream;
-
-
-
-
-
-
-
publicinterfaceValidateImageService{
-
-
-
-
StringDefault_ValidateCode="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
-
-
-
-
intDisturb_Type_Default=0;
-
-
-
-
intDisturb_Type_Simple=1;
-
-
-
-
intDisturb_Type_Complex=2;
-
-
-
-
-
-
-
-
-
-
-
-
-
publicabstractStringcreateValidateCode(intdisturbType,intfontSize,ByteArrayOutputStreambos,intwidth,intheight,StringvalidateCode,intcodeLength);
-
-
}
验证码生成的实现 ValidateImageServiceImp.java
java 代码
-
packagecn.gx80.service.util;
-
-
importjava.awt.Color;
-
importjava.awt.Font;
-
importjava.awt.Graphics;
-
importjava.awt.image.BufferedImage;
-
importjava.io.ByteArrayOutputStream;
-
importjava.io.IOException;
-
importjava.util.Random;
-
-
importjavax.imageio.ImageIO;
-
importjavax.imageio.stream.ImageOutputStream;
-
-
-
publicclassValidateImageServiceImpimplementsValidateImageService{
-
-
publicStringcreateValidateCode(intdisturbType,intfontSize,ByteArrayOutputStreambos,intwidth,intheight,StringvalidateCode,intcodeLength){
-
BufferedImagebImg=newBufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
-
Graphicsg=bImg.getGraphics();
-
Randomrandom=newRandom();
-
-
if(null==validateCode||validateCode.isEmpty()){
-
validateCode=Default_ValidateCode;
-
}
-
if(fontSize>=height){
-
fontSize=height-1;
-
}
-
-
drawOutline(g,width,height);
-
switch(disturbType){
-
caseDisturb_Type_Simple:
-
drawSimpleDisturb(g,random,width,height);
-
break;
-
caseDisturb_Type_Complex:
-
drawDisturb(g,random,width,height);
-
break;
-
default:
-
break;
-
}
-
-
Stringcode=drawCode(g,random,validateCode,codeLength,width,height,fontSize);
-
g.dispose();
-
try{
-
ImageOutputStreamimOut=ImageIO.createImageOutputStream(bos);
-
ImageIO.write(bImg,"JPEG",imOut);
-
imOut.close();
-
}catch(IOExceptione){
-
e.printStackTrace();
-
}
-
returncode;
-
}
-
-
-
-
-
-
-
-
privatestaticvoiddrawOutline(Graphicsg,intwidth,intheight){
-
g.setColor(Color.white);
-
g.fillRect(0,0,width,height);
-
g.setColor(Color.BLACK);
-
g.drawRect(0,0,width-1,height-1);
-
}
-
-
-
-
-
-
-
-
-
privatestaticvoiddrawDisturb(Graphicsg,Randomrandom,intwidth,intheight){
-
intx,y,x1,y1;
-
for(inti=0;i<width;i++){
-
x=random.nextInt(width);
-
y=random.nextInt(height);
-
x1=random.nextInt(12);
-
y1=random.nextInt(12);
-
g.setColor(getRandomColor(random,120,255));
-
g.drawLine(x,y,x+x1,y+y1);
-
g.fillArc(x,y,x1,y1,random.nextInt(360),random.nextInt(360));
-
}
-
}
-
-
-
-
-
-
-
-
-
privatestaticvoiddrawSimpleDisturb(Graphicsg,Randomrandom,intwidth,intheight){
-
g.setColor(getRandomColor(random,160,200));
-
for(inti=0;i<155;i++)
-
{
-
intx=random.nextInt(width);
-
inty=random.nextInt(height);
-
intxl=random.nextInt(12);
-
intyl=random.nextInt(12);
-
g.drawLine(x,y,x+xl,y+yl);
-
}
-
}
-
-
-
-
-
-
-
-
-
privatestaticColorgetRandomColor(Randomrandom,intpMin,intpMax){
-
pMax=(Math.abs(pMax)>255?255:Math.abs(pMax));
-
pMin=(Math.abs(pMin)>255?255:Math.abs(pMin));
-
-
intr=pMin+random.nextInt(Math.abs(pMax-pMin));
-
intg=pMin+random.nextInt(Math.abs(pMax-pMin));
-
intb=pMin+random.nextInt(Math.abs(pMax-pMin));
-
-
returnnewColor(r,g,b);
-
}
-
-
-
-
-
-
-
-
-
-
-
-
-
privatestaticStringdrawCode(Graphicsg,Randomrandom,StringvalidateCode,intcodeLength,intwidth,intheight,intfontSize){
-
intvalidateCodeLength=validateCode.length();
-
Fontfont1=newFont("Verdana",Font.BOLD,fontSize);
-
Fontfont2=newFont("serif",Font.BOLD,fontSize);
-
-
StringBuffersb=newStringBuffer();
-
intx,y;
-
for(inti=0;i<codeLength;i++){
-
x=(width/codeLength-1)*i+random.nextInt(width/(codeLength*2));
-
y=random.nextInt(height-fontSize)+fontSize;
-
sb.append(getRandomChar(validateCode,validateCodeLength,random));
-
g.setColor(getRandomColor(random,70,150));
-
if(sb.substring(i).getBytes().length>1)
-
g.setFont(font2);
-
else
-
g.setFont(font1);
-
g.drawString(sb.substring(i),x,y);
-
}
-
returnsb.toString();
-
}
-
-
-
-
-
-
-
-
-
privatestaticchargetRandomChar(StringvalidateCode,intvalidateCodeLength,Randomrandom){
-
returnvalidateCode.charAt(random.nextInt(validateCodeLength));
-
}
-
}
struts.xml 配置
xml 代码
-
<packagename="gx80-test"namespace="/test"extends="gx80-default">
-
-
<actionname="validateCode"class="cn.gx80.control.action.basic.ValidateImgAction">
-
<interceptor-refname="gx80DefaultStack"/>
-
<interceptor-refname="staticParams"/>
-
<paramname="width">100</param>
-
<paramname="height">30</param>
-
<paramname="fontSize">18</param>
-
<paramname="codeLength">5</param>
-
<resultname="success"type="stream">
-
<paramname="contentType">image/jpeg</param>
-
</result>
-
</action>
-
-
</package>
当然还有语言文件中的
验证码字符串 global.properties
java 代码
-
System.validateCode=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789/u4E00/u4E8C/u4E09/u56DB/u4E94/u516D/u4E03/u516B/u4E5D/u5341/u767E/u5343/u4E07/u5E7F/u897F/u5357/u5B81/u79D1/u56ED/u5927/u9053/u8F6F/u4EF6/u4E2D/u56FD/u4EBA/u6C11/u4E07/u5C81
一切配置好后,访问
127.0.0.1:8080/gx80/test/validateCode.do
分享到:
相关推荐
### Struts2 生成验证码知识点解析 #### 一、引言 在Web应用程序开发中,验证码是一种常见的安全机制,用于防止自动化的恶意攻击,如垃圾邮件发送或非法登录尝试等。Struts2作为一款流行的Java Web应用框架,支持...
2. **配置Struts2**:在Struts2的配置文件(struts.xml)中,我们需要定义一个Action,这个Action将负责生成验证码。Action应该有一个结果类型,指向一个JSP页面或者FreeMarker模板,用于显示验证码图片。 3. **...
"struts2-生成图片验证码"的主题表明我们将探讨如何在Struts2框架中实现图片验证码的功能。 验证码通常由随机生成的一串字符组成,这些字符以图像形式显示,用户需要输入他们看到的字符以完成验证。在Struts2中实现...
1. **生成验证码**:创建一个Java类,用于生成随机的字符串或数字。这个类可能包含一个方法,返回一个指定长度的字符串,例如包含4位数字。我们可以使用Java的`Random`类和`StringBuilder`类来实现这一功能。 2. **...
5. **结果映射(Result Mapping)**:在Struts2的配置文件(struts.xml)中,我们需要定义Action类的不同结果,比如生成验证码成功后的页面跳转,或者验证失败后的提示信息。 6. **JSP页面**:前端展示部分,包括...
图像元素的`src`属性指向一个Struts2的Action,这里是`validateCode.action`。`onclick`和`onerror`事件处理函数用于在用户点击或加载失败时刷新验证码。输入框用于用户输入看到的验证码字符。 2. **Struts.xml ...
通过设置`src`属性为一个Struts2的Action,该Action会返回验证码的图片流。 ```html <img id="captchaImg" src="getCaptcha.action"/> ``` 4. **JavaScript交互** 前端通常需要提供一个刷新验证码的功能,这...
Action可能包含一个方法,该方法生成验证码并将其设置到Session中。 - 同时,还需要配置一个结果(Result)类型,比如`stream`,用于将生成的验证码图片直接输出到浏览器。 3. **JSP页面**: - 登录页面的HTML或...
`CaptchaAction`类中,`generate`方法负责生成验证码并返回图像,而`validate`方法接收用户输入并进行验证。 总之,Struts2中的验证码实现涉及了Java图形处理、随机字符串生成以及HTTP请求处理等多个技术领域。这个...
在Struts2框架中,我们可以创建一个Action类,该类负责处理生成验证码的请求,如`GenerateVerificationCodeAction`。这个Action将执行上述步骤,并返回生成的验证码图片。 JavaScript在其中的作用主要是在前端与...
这个类可能包含一个`generate`方法,该方法将调用`RandomCode`类生成验证码,并将其存储在一个会话级的属性中,例如`session.setAttribute("captcha", code)`。 3. **创建结果类型**: Struts2使用结果类型来决定...
3. **结果类型(Result)**:生成验证码后,需要将生成的图像返回给客户端。你可以配置一个特定的结果类型,如“stream”,用于输出图像流到HTTP响应中。 4. **JSP/FreeMarker模板**:前端页面上需要有一个表单让...
首先,我们需要创建一个Action类,这个类负责生成验证码。Action类会生成一串随机字符串,然后将其保存在session中,同时将字符串转化为图像。在生成图像的过程中,我们可以通过改变字体、颜色、角度、噪声点等元素...
在这个目录下,你会找到Action类、Service类、DAO(数据访问对象)类、配置文件如struts.xml、spring-servlet.xml、web.xml,以及用于生成和验证验证码的类或组件。例如,验证码可能通过Servlet生成并存储在Session...
5. **工具使用**:除了Struts2的插件,还有许多第三方库可以帮助我们生成验证码,例如,Google的reCAPTCHA服务,它可以提供更高级的保护,如行为分析,以检测是否为真实人类。这些工具的集成也可以在Struts2项目中...
### Struts2 图片验证码实现解析 #### 一、引言 在Web应用程序中,图片验证码(CAPTCHA)被广泛用于防止自动化攻击和机器人操作,确保用户是真实的人类。Struts2框架提供了丰富的功能来集成这样的安全特性,本文将...
例如,你可能会有一个名为`GenerateCaptchaAction`的类,负责生成验证码,并将其存入session,然后在`login.jsp`这样的页面中,通过`<s:property>`标签来显示验证码图片。 此外,为了提高验证码的安全性,可以考虑...
在Struts2配置文件(struts.xml)中,我们需要为生成验证码的Action添加一个对应的URL映射,以及一个显示验证码的JSP页面。JSP页面可能包含一个img标签,其src属性指向生成验证码的Action URL。当用户点击刷新按钮...
6. **Servlet**:这个项目中可能包含一个专门生成验证码的Servlet。它会随机生成一串中文字符,存储在Session中,并将其绘制到图像上。生成的图像以JPEG或PNG格式输出,供JSP页面显示。 7. **中文字符库**:为了...