`
xiamizy
  • 浏览: 89921 次
  • 性别: Icon_minigender_1
  • 来自: 南京
博客专栏
78437efc-ad8e-387c-847f-a092d52e81a6
spring framew...
浏览量:4887
社区版块
存档分类
最新评论

struts2生成中文验证码的Action

 
阅读更多
struts2 的Action类 ValidateImgAction.java

java 代码
  1. packagecn.gx80.control.action.basic;
  2. importjava.io.ByteArrayInputStream;
  3. importjava.io.ByteArrayOutputStream;
  4. importjava.io.IOException;
  5. importjava.util.Map;
  6. importorg.apache.struts2.interceptor.SessionAware;
  7. importcn.gx80.service.util.ValidateImageService;
  8. importcn.gx80.util.Key;
  9. /**
  10. *生成验证码
  11. *@author飞天色鼠
  12. *
  13. */
  14. @SuppressWarnings("unchecked")
  15. publicclassValidateImgActionextendsStreamBasicActionimplementsSessionAware{
  16. privatestaticfinallongserialVersionUID=6894525175454169331L;
  17. privatestaticfinalStringDefault_ValidateCode="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
  18. privateMapsession;
  19. privateintwidth;
  20. privateintheight;
  21. privateintfontSize;
  22. privateintcodeLength;
  23. privateValidateImageServicevalidateImageService;
  24. publicValidateImgAction(){
  25. this.contentType="image/jpeg";
  26. width=80;
  27. height=20;
  28. fontSize=16;
  29. codeLength=4;
  30. }
  31. publicvoidsetSession(Mapsession){
  32. this.session=session;
  33. }
  34. publicvoidsetWidth(intwidth){
  35. this.width=width;
  36. }
  37. publicvoidsetHeight(intheight){
  38. this.height=height;
  39. }
  40. publicvoidsetFontSize(intfontSize){
  41. this.fontSize=fontSize;
  42. }
  43. publicvoidsetCodeLength(intcodeLength){
  44. this.codeLength=codeLength;
  45. }
  46. publicvoidsetValidateImageService(ValidateImageServicevalidateImageService){
  47. this.validateImageService=validateImageService;
  48. }
  49. publicStringexecute()throwsException{
  50. session.put(Key.ValidateCodeByLogin,createInputStream(ValidateImageService.Disturb_Type_Simple));
  51. returnSUCCESS;
  52. }
  53. privateStringcreateInputStream(intdisturbType)throwsIOException{
  54. ByteArrayOutputStreambos=newByteArrayOutputStream();
  55. StringvalidateCode=null;
  56. validateCode=validateImageService.createValidateCode(disturbType,fontSize,bos,width,height,getText("System.validateCode",Default_ValidateCode),codeLength);
  57. inputStream=newByteArrayInputStream(bos.toByteArray());
  58. bos.close();
  59. returnvalidateCode;
  60. }
  61. }


验证码生成接口 ValidateImageService.java

java 代码
  1. packagecn.gx80.service.util;
  2. importjava.io.ByteArrayOutputStream;
  3. /**
  4. *验证码生成服务类
  5. *@author飞天色鼠
  6. *
  7. */
  8. publicinterfaceValidateImageService{
  9. /**
  10. *默认验证字符串
  11. */
  12. StringDefault_ValidateCode="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
  13. /**
  14. *默认绘制干扰线的类型(不绘制干扰线)
  15. */
  16. intDisturb_Type_Default=0;
  17. /**
  18. *绘制单一色调的干扰线
  19. */
  20. intDisturb_Type_Simple=1;
  21. /**
  22. *绘制复杂的干扰线
  23. */
  24. intDisturb_Type_Complex=2;
  25. /**
  26. *生成验证图片并返回验证码
  27. *@paramdisturbType
  28. *@paramfontSize
  29. *@parambos
  30. *@paramwidth
  31. *@paramheight
  32. *@paramvalidateCode
  33. *@paramcodeLength
  34. *@return
  35. */
  36. publicabstractStringcreateValidateCode(intdisturbType,intfontSize,ByteArrayOutputStreambos,intwidth,intheight,StringvalidateCode,intcodeLength);
  37. }


验证码生成的实现 ValidateImageServiceImp.java

java 代码
  1. packagecn.gx80.service.util;
  2. importjava.awt.Color;
  3. importjava.awt.Font;
  4. importjava.awt.Graphics;
  5. importjava.awt.image.BufferedImage;
  6. importjava.io.ByteArrayOutputStream;
  7. importjava.io.IOException;
  8. importjava.util.Random;
  9. importjavax.imageio.ImageIO;
  10. importjavax.imageio.stream.ImageOutputStream;
  11. publicclassValidateImageServiceImpimplementsValidateImageService{
  12. publicStringcreateValidateCode(intdisturbType,intfontSize,ByteArrayOutputStreambos,intwidth,intheight,StringvalidateCode,intcodeLength){
  13. BufferedImagebImg=newBufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
  14. Graphicsg=bImg.getGraphics();
  15. Randomrandom=newRandom();
  16. if(null==validateCode||validateCode.isEmpty()){
  17. validateCode=Default_ValidateCode;
  18. }
  19. if(fontSize>=height){
  20. fontSize=height-1;
  21. }
  22. drawOutline(g,width,height);
  23. switch(disturbType){
  24. caseDisturb_Type_Simple:
  25. drawSimpleDisturb(g,random,width,height);
  26. break;
  27. caseDisturb_Type_Complex:
  28. drawDisturb(g,random,width,height);
  29. break;
  30. default:
  31. break;
  32. }
  33. Stringcode=drawCode(g,random,validateCode,codeLength,width,height,fontSize);
  34. g.dispose();
  35. try{
  36. ImageOutputStreamimOut=ImageIO.createImageOutputStream(bos);
  37. ImageIO.write(bImg,"JPEG",imOut);
  38. imOut.close();
  39. }catch(IOExceptione){
  40. e.printStackTrace();
  41. }
  42. returncode;
  43. }
  44. /**
  45. *绘制边框
  46. *@paramg
  47. *@paramwidth
  48. *@paramheight
  49. */
  50. privatestaticvoiddrawOutline(Graphicsg,intwidth,intheight){
  51. g.setColor(Color.white);
  52. g.fillRect(0,0,width,height);
  53. g.setColor(Color.BLACK);
  54. g.drawRect(0,0,width-1,height-1);
  55. }
  56. /**
  57. *绘制比较复杂的干扰线
  58. *@paramg
  59. *@paramrandom
  60. *@paramwidth
  61. *@paramheight
  62. */
  63. privatestaticvoiddrawDisturb(Graphicsg,Randomrandom,intwidth,intheight){
  64. intx,y,x1,y1;
  65. for(inti=0;i<width;i++){
  66. x=random.nextInt(width);
  67. y=random.nextInt(height);
  68. x1=random.nextInt(12);
  69. y1=random.nextInt(12);
  70. g.setColor(getRandomColor(random,120,255));
  71. g.drawLine(x,y,x+x1,y+y1);
  72. g.fillArc(x,y,x1,y1,random.nextInt(360),random.nextInt(360));
  73. }
  74. }
  75. /**
  76. *绘制简单的干扰线
  77. *@paramg
  78. *@paramrandom
  79. *@paramwidth
  80. *@paramheight
  81. */
  82. privatestaticvoiddrawSimpleDisturb(Graphicsg,Randomrandom,intwidth,intheight){
  83. g.setColor(getRandomColor(random,160,200));
  84. for(inti=0;i<155;i++)
  85. {
  86. intx=random.nextInt(width);
  87. inty=random.nextInt(height);
  88. intxl=random.nextInt(12);
  89. intyl=random.nextInt(12);
  90. g.drawLine(x,y,x+xl,y+yl);
  91. }
  92. }
  93. /**
  94. *取得随机颜色
  95. *@paramrandom
  96. *@parampMin
  97. *@parampMax
  98. *@return
  99. */
  100. privatestaticColorgetRandomColor(Randomrandom,intpMin,intpMax){
  101. pMax=(Math.abs(pMax)>255?255:Math.abs(pMax));
  102. pMin=(Math.abs(pMin)>255?255:Math.abs(pMin));
  103. intr=pMin+random.nextInt(Math.abs(pMax-pMin));
  104. intg=pMin+random.nextInt(Math.abs(pMax-pMin));
  105. intb=pMin+random.nextInt(Math.abs(pMax-pMin));
  106. returnnewColor(r,g,b);
  107. }
  108. /**
  109. *绘制验证码
  110. *@paramg
  111. *@paramrandom
  112. *@paramvalidateCode
  113. *@paramcodeLength
  114. *@paramwidth
  115. *@paramheight
  116. *@paramfontSize
  117. *@return
  118. */
  119. privatestaticStringdrawCode(Graphicsg,Randomrandom,StringvalidateCode,intcodeLength,intwidth,intheight,intfontSize){
  120. intvalidateCodeLength=validateCode.length();
  121. Fontfont1=newFont("Verdana",Font.BOLD,fontSize);
  122. Fontfont2=newFont("serif",Font.BOLD,fontSize);
  123. StringBuffersb=newStringBuffer();
  124. intx,y;
  125. for(inti=0;i<codeLength;i++){
  126. x=(width/codeLength-1)*i+random.nextInt(width/(codeLength*2));
  127. y=random.nextInt(height-fontSize)+fontSize;
  128. sb.append(getRandomChar(validateCode,validateCodeLength,random));
  129. g.setColor(getRandomColor(random,70,150));
  130. if(sb.substring(i).getBytes().length>1)
  131. g.setFont(font2);
  132. else
  133. g.setFont(font1);
  134. g.drawString(sb.substring(i),x,y);
  135. }
  136. returnsb.toString();
  137. }
  138. /**
  139. *取得随机字符
  140. *@paramvalidateCode
  141. *@paramvalidateCodeLength
  142. *@paramrandom
  143. *@return
  144. */
  145. privatestaticchargetRandomChar(StringvalidateCode,intvalidateCodeLength,Randomrandom){
  146. returnvalidateCode.charAt(random.nextInt(validateCodeLength));
  147. }
  148. }

struts.xml 配置

xml 代码
  1. <packagename="gx80-test"namespace="/test"extends="gx80-default">
  2. <actionname="validateCode"class="cn.gx80.control.action.basic.ValidateImgAction">
  3. <interceptor-refname="gx80DefaultStack"/>
  4. <interceptor-refname="staticParams"/>
  5. <paramname="width">100</param>
  6. <paramname="height">30</param>
  7. <paramname="fontSize">18</param>
  8. <paramname="codeLength">5</param>
  9. <resultname="success"type="stream">
  10. <paramname="contentType">image/jpeg</param>
  11. </result>
  12. </action>
  13. </package>


当然还有语言文件中的验证码字符串 global.properties

java 代码
  1. 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 生成验证码

    ### Struts2 生成验证码知识点解析 #### 一、引言 在Web应用程序开发中,验证码是一种常见的安全机制,用于防止自动化的恶意攻击,如垃圾邮件发送或非法登录尝试等。Struts2作为一款流行的Java Web应用框架,支持...

    Struts2的验证码生成

    2. **配置Struts2**:在Struts2的配置文件(struts.xml)中,我们需要定义一个Action,这个Action将负责生成验证码。Action应该有一个结果类型,指向一个JSP页面或者FreeMarker模板,用于显示验证码图片。 3. **...

    struts2-生成图片验证码

    "struts2-生成图片验证码"的主题表明我们将探讨如何在Struts2框架中实现图片验证码的功能。 验证码通常由随机生成的一串字符组成,这些字符以图像形式显示,用户需要输入他们看到的字符以完成验证。在Struts2中实现...

    struts2实现验证码

    1. **生成验证码**:创建一个Java类,用于生成随机的字符串或数字。这个类可能包含一个方法,返回一个指定长度的字符串,例如包含4位数字。我们可以使用Java的`Random`类和`StringBuilder`类来实现这一功能。 2. **...

    基于struts2的验证码生成

    5. **结果映射(Result Mapping)**:在Struts2的配置文件(struts.xml)中,我们需要定义Action类的不同结果,比如生成验证码成功后的页面跳转,或者验证失败后的提示信息。 6. **JSP页面**:前端展示部分,包括...

    struts中实现验证码

    图像元素的`src`属性指向一个Struts2的Action,这里是`validateCode.action`。`onclick`和`onerror`事件处理函数用于在用户点击或加载失败时刷新验证码。输入框用于用户输入看到的验证码字符。 2. **Struts.xml ...

    Struts2验证码

    通过设置`src`属性为一个Struts2的Action,该Action会返回验证码的图片流。 ```html &lt;img id="captchaImg" src="getCaptcha.action"/&gt; ``` 4. **JavaScript交互** 前端通常需要提供一个刷新验证码的功能,这...

    使用struts2.0实现的验证码功能

    Action可能包含一个方法,该方法生成验证码并将其设置到Session中。 - 同时,还需要配置一个结果(Result)类型,比如`stream`,用于将生成的验证码图片直接输出到浏览器。 3. **JSP页面**: - 登录页面的HTML或...

    struts2做的验证码(区分数字和字母)

    `CaptchaAction`类中,`generate`方法负责生成验证码并返回图像,而`validate`方法接收用户输入并进行验证。 总之,Struts2中的验证码实现涉及了Java图形处理、随机字符串生成以及HTTP请求处理等多个技术领域。这个...

    Struts2验证码用户登录

    在Struts2框架中,我们可以创建一个Action类,该类负责处理生成验证码的请求,如`GenerateVerificationCodeAction`。这个Action将执行上述步骤,并返回生成的验证码图片。 JavaScript在其中的作用主要是在前端与...

    struts2 图片 验证码

    这个类可能包含一个`generate`方法,该方法将调用`RandomCode`类生成验证码,并将其存储在一个会话级的属性中,例如`session.setAttribute("captcha", code)`。 3. **创建结果类型**: Struts2使用结果类型来决定...

    struts2验证码

    3. **结果类型(Result)**:生成验证码后,需要将生成的图像返回给客户端。你可以配置一个特定的结果类型,如“stream”,用于输出图像流到HTTP响应中。 4. **JSP/FreeMarker模板**:前端页面上需要有一个表单让...

    Struts2 图片验证码

    首先,我们需要创建一个Action类,这个类负责生成验证码。Action类会生成一串随机字符串,然后将其保存在session中,同时将字符串转化为图像。在生成图像的过程中,我们可以通过改变字体、颜色、角度、噪声点等元素...

    struts2+spring3验证码登录实例

    在这个目录下,你会找到Action类、Service类、DAO(数据访问对象)类、配置文件如struts.xml、spring-servlet.xml、web.xml,以及用于生成和验证验证码的类或组件。例如,验证码可能通过Servlet生成并存储在Session...

    struts2 验证码----web界面生成几种常见的验证码

    5. **工具使用**:除了Struts2的插件,还有许多第三方库可以帮助我们生成验证码,例如,Google的reCAPTCHA服务,它可以提供更高级的保护,如行为分析,以检测是否为真实人类。这些工具的集成也可以在Struts2项目中...

    struts2图片验证码--struts2图片验证码-(通用版)

    ### Struts2 图片验证码实现解析 #### 一、引言 在Web应用程序中,图片验证码(CAPTCHA)被广泛用于防止自动化攻击和机器人操作,确保用户是真实的人类。Struts2框架提供了丰富的功能来集成这样的安全特性,本文将...

    基于struts1.x的验证码实现

    例如,你可能会有一个名为`GenerateCaptchaAction`的类,负责生成验证码,并将其存入session,然后在`login.jsp`这样的页面中,通过`&lt;s:property&gt;`标签来显示验证码图片。 此外,为了提高验证码的安全性,可以考虑...

    Struts2实现生成动态验证码并验证实例代码

    在Struts2配置文件(struts.xml)中,我们需要为生成验证码的Action添加一个对应的URL映射,以及一个显示验证码的JSP页面。JSP页面可能包含一个img标签,其src属性指向生成验证码的Action URL。当用户点击刷新按钮...

    仿CSDN样式(Struts2中文验证码源代码)

    6. **Servlet**:这个项目中可能包含一个专门生成验证码的Servlet。它会随机生成一串中文字符,存储在Session中,并将其绘制到图像上。生成的图像以JPEG或PNG格式输出,供JSP页面显示。 7. **中文字符库**:为了...

Global site tag (gtag.js) - Google Analytics