- 浏览: 189855 次
- 性别:
- 来自: 四川
文章分类
- 全部博客 (131)
- CMS内容管理系统 (3)
- 支付宝实习之旅 (1)
- javaSE (5)
- myEclipse (1)
- DWR (0)
- strut2 (6)
- spring (4)
- hibernate (6)
- jquery (26)
- extjs (0)
- oracle (1)
- flex (10)
- ajax (0)
- jsp (3)
- java (4)
- JavaScript (4)
- css+div (5)
- Java面试 (3)
- java设计模式 (2)
- Think in java 笔记 (2)
- dom4j (1)
- JDBC (1)
- 经典方法学习 (1)
- windows常用操作 (1)
- maven (1)
- 75道经典逻辑题及答案 (1)
- mysql (3)
- jqueryDemo(插件) (3)
- php (14)
- ubuntu (6)
- 记事本 (1)
- php缓存 (1)
- 编程思想 (5)
- wamp (1)
- android (2)
- xml (1)
最新评论
-
coosummer:
推荐使用http://buttoncssgenerator.c ...
CSS按钮(研究) -
javaCrazy!:
监听一个keyup事件
jquery 监听input输入值事件 -
丶月满灬西楼彡:
问个问题:假如用户在Input中输入了“12345”,但后来又 ...
jquery 监听input输入值事件
一、servlet实现验证码的生成:
第一步:
web.xml配置
01.<servlet> 02. <servlet-name>image</servlet-name> 03. <servlet-class>org.test.web.AuthImage</servlet-class> 04.</servlet> 05. 06.<servlet-mapping> 07. <servlet-name>image</servlet-name> 08. <url-pattern>/authImage</url-pattern> 09.</servlet-mapping>
第二步:
servlet配置:
01.public class AuthImage extends HttpServlet 02.{ 03. 04. private static final String CONTENT_TYPE = "text/html; charset=gb2312"; 05. //设置字母的大小,大小 06. private Font mFont = new Font("Times New Roman", Font.PLAIN, 17); 07. public void init() throws ServletException 08. { 09. super.init(); 10. } 11. Color getRandColor(int fc,int bc) 12. { 13. Random random = new Random(); 14. if(fc>255) fc=255; 15. if(bc>255) bc=255; 16. int r=fc+random.nextInt(bc-fc); 17. int g=fc+random.nextInt(bc-fc); 18. int b=fc+random.nextInt(bc-fc); 19. return new Color(r,g,b); 20. } 21. 22. public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 23. { 24. response.setHeader("Pragma","No-cache"); 25. response.setHeader("Cache-Control","no-cache"); 26. response.setDateHeader("Expires", 0); 27. //表明生成的响应是图片 28. response.setContentType("image/jpeg"); 29. 30. int width=100, height=18; 31. BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); 32. 33. Graphics g = image.getGraphics(); 34. Random random = new Random(); 35. g.setColor(getRandColor(200,250)); 36. g.fillRect(1, 1, width-1, height-1); 37. g.setColor(new Color(102,102,102)); 38. g.drawRect(0, 0, width-1, height-1); 39. g.setFont(mFont); 40. 41. g.setColor(getRandColor(160,200)); 42. 43. //画随机线 44. for (int i=0;i<155;i++) 45. { 46. int x = random.nextInt(width - 1); 47. int y = random.nextInt(height - 1); 48. int xl = random.nextInt(6) + 1; 49. int yl = random.nextInt(12) + 1; 50. g.drawLine(x,y,x + xl,y + yl); 51. } 52. 53. //从另一方向画随机线 54. for (int i = 0;i < 70;i++) 55. { 56. int x = random.nextInt(width - 1); 57. int y = random.nextInt(height - 1); 58. int xl = random.nextInt(12) + 1; 59. int yl = random.nextInt(6) + 1; 60. g.drawLine(x,y,x - xl,y - yl); 61. } 62. 63. //生成随机数,并将随机数字转换为字母 64. String sRand=""; 65. for (int i=0;i<6;i++) 66. { 67. int itmp = random.nextInt(26) + 65; 68. char ctmp = (char)itmp; 69. sRand += String.valueOf(ctmp); 70. g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110))); 71. g.drawString(String.valueOf(ctmp),15*i+10,16); 72. } 73. 74. HttpSession session = request.getSession(true); 75. session.setAttribute("rand",sRand); 76. g.dispose(); 77. ImageIO.write(image, "JPEG", response.getOutputStream()); 78. } 79. public void destroy() 80. { 81. } 82.}
第三步:
页面访问:
01.<img src="authImage"/>
二、纯jsp实现验证码的生产
第一步:
jsp代码:
01.<%@ page language="java" import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*" 02. contentType="image/jpeg" pageEncoding="UTF-8"%> 03. 04. 05.<% //设置页面不缓存 06. response.setHeader("Pragma","No-cache"); 07. response.setHeader("Cahce-Control","no-cache"); 08. response.setDateHeader("Expires",0); 09. //在内存中创建图片 10. int width=60,height=20; 11. BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB); 12. //获取图形上下文 13. Graphics g= image.getGraphics(); 14. //生成随机类 15. Random random= new Random(); 16. //设置背景颜色 17. g.setColor(new Color(160,200,100)); 18. g.fillRect(0,0,width,height); 19. //设置字体 20. g.setFont(new Font("Times New Roman",Font.PLAIN,18)); 21. //随机产生50条干扰线,使图形中的验证码不易被其他的程序探测到 22. g.setColor(new Color(160,200,200)); 23. for(int i=0;i<50;i++) 24. { 25. int x=random.nextInt(width); 26. int y=random.nextInt(height); 27. int x1=random.nextInt(width); 28. int y1=random.nextInt(height); 29. g.drawLine(x,y,x+x1,y+y1); 30. } 31. //随机产生验证码(6位数字) 32. String sRand=""; 33. for(int i=0;i<6;i++) 34. { 35. String rand=String.valueOf(random.nextInt(10)); 36. sRand+=rand; 37. //将验证码显示到图象 38. g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110))); 39. g.drawString(rand,13*i+6,16); 40. } 41. session.setAttribute("rand",sRand); //////将产生的验证码存储到sesson中 42. g.dispose(); 43. ImageIO.write(image,"JPEG",response.getOutputStream()); 44. out.clear(); //*********** 45. out=pageContext.pushBody();//********** 46. %>
第二步:
页面访问:
01.<img src="xxx.jsp"/>
三、struts实现验证码生成:
第一步:
工具类RandomNumUtil 代码:
01.package com.cn.hospital.util; 02. 03.import java.awt.Color; 04.import java.awt.Font; 05.import java.awt.Graphics; 06.import java.awt.image.BufferedImage; 07.import java.io.ByteArrayInputStream; 08.import java.io.ByteArrayOutputStream; 09.import java.util.Random; 10.import javax.imageio.ImageIO; 11.import javax.imageio.stream.ImageOutputStream; 12. 13.public class RandomNumUtil { 14. 15. private ByteArrayInputStream image;//图像 16. private String str;//验证码 17. 18. private RandomNumUtil(){ 19. init();//初始化属性 20. } 21. /* 22. * 取得RandomNumUtil实例 23. */ 24. public static RandomNumUtil Instance(){ 25. return new RandomNumUtil(); 26. } 27. /* 28. * 取得验证码图片 29. */ 30. public ByteArrayInputStream getImage(){ 31. return this.image; 32. } 33. /* 34. * 取得图片的验证码 35. */ 36. public String getString(){ 37. return this.str; 38. } 39. 40. private void init() { 41. // 在内存中创建图象 42. int width=85, height=20; 43. BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); 44. // 获取图形上下文 45. Graphics g = image.getGraphics(); 46. // 生成随机类 47. Random random = new Random(); 48. // 设定背景色 49. g.setColor(getRandColor(200,250)); 50. g.fillRect(0, 0, width, height); 51. // 设定字体 52. g.setFont(new Font("Times New Roman",Font.PLAIN,18)); 53. // 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到 54. g.setColor(getRandColor(160,200)); 55. for (int i=0;i<155;i++) 56. { 57. int x = random.nextInt(width); 58. int y = random.nextInt(height); 59. int xl = random.nextInt(12); 60. int yl = random.nextInt(12); 61. g.drawLine(x,y,x+xl,y+yl); 62. } 63. // 取随机产生的认证码(6位数字) 64. String sRand=""; 65. for (int i=0;i<6;i++){ 66. String rand=String.valueOf(random.nextInt(10)); 67. sRand+=rand; 68. // 将认证码显示到图象中 69. g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110))); 70. // 调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成 71. g.drawString(rand,13*i+6,16); 72. } 73. //赋值验证码 74. this.str=sRand; 75. 76. //图象生效 77. g.dispose(); 78. ByteArrayInputStream input=null; 79. ByteArrayOutputStream output = new ByteArrayOutputStream(); 80. try{ 81. ImageOutputStream imageOut = ImageIO.createImageOutputStream(output); 82. ImageIO.write(image, "JPEG", imageOut); 83. imageOut.close(); 84. input = new ByteArrayInputStream(output.toByteArray()); 85. }catch(Exception e){ 86. System.out.println("验证码图片产生出现错误:"+e.toString()); 87. } 88. 89. this.image=input;/* 赋值图像 */ 90. } 91. /* 92. * 给定范围获得随机颜色 93. */ 94. private Color getRandColor(int fc,int bc){ 95. Random random = new Random(); 96. if(fc>255) fc=255; 97. if(bc>255) bc=255; 98. int r=fc+random.nextInt(bc-fc); 99. int g=fc+random.nextInt(bc-fc); 100. int b=fc+random.nextInt(bc-fc); 101. return new Color(r,g,b); 102. } 103.}
第二步:
验证码输出action
01.package com.cn.hospital.action; 02. 03.import java.io.ByteArrayInputStream; 04.import java.io.ByteArrayOutputStream; 05. 06.import org.springframework.context.annotation.Scope; 07.import org.springframework.stereotype.Controller; 08. 09.import com.cn.hospital.util.RandomCharUtil; 10.import com.cn.hospital.util.RandomNumUtil; 11.import com.opensymphony.xwork2.ActionContext; 12.import com.opensymphony.xwork2.ActionSupport; 13. 14.@Controller("utilAction") 15.@Scope("prototype") 16.public class UtilAction extends ActionSupport{ 17. 18. private static final long serialVersionUID = -7193209177116825032L; 19. private ByteArrayInputStream inputStream; 20. 21. private int width; 22. private int height; 23. private int fontSize; 24. private int codeLength; 25. private int disturbType; 26. 27. public String validNumGenerate() throws Exception{ 28. RandomNumUtil rdnu=RandomNumUtil.Instance(); 29. this.setInputStream(rdnu.getImage());//取得带有随机字符串的图片 30. ActionContext.getContext().getSession().put("random", rdnu.getString());//取得随机字符串放入HttpSession 31. return SUCCESS; 32. } 33. 34. 35. public void setInputStream(ByteArrayInputStream inputStream) { 36. this.inputStream = inputStream; 37. } 38. 39. public ByteArrayInputStream getInputStream() { 40. return inputStream; 41. } 42. 43. 44.}
第三步:
struts.xml配置
01.<!-- 产生随机验证码 --> 02. <action name="randNum" class="utilAction" method="validNumGenerate"> 03. <result name="success" type="stream"> 04. <param name="contentType">image/jpeg</param> 05. <param name="inputName">inputStream</param> 06. </result> 07. </action>
第四步:
页面访问:
01.<img src="randNum"/>
相关推荐
彩色验证码的实现是在生成验证码的基础上增加了颜色元素,使得验证码更难以被自动化工具识别,增强了安全性。 JSP是一种基于Java的服务器端脚本语言,用于创建动态网页。在本项目中,`code.jsp`是核心页面,它负责...
2. **配置Struts2**:在Struts2的配置文件(struts.xml)中,我们需要定义一个Action,这个Action将负责生成验证码。Action应该有一个结果类型,指向一个JSP页面或者FreeMarker模板,用于显示验证码图片。 3. **...
这个类将包含生成验证码的方法,以及处理用户提交验证的逻辑。 3. **生成中文验证码**: 验证码生成通常涉及随机选择汉字并组合。你可以使用Java的`Random`类和预先准备的汉字字符数组来生成随机的中文字符串。确保...
在Struts2中,可以使用Java的Random类或其他库(如Apache Commons Lang的RandomStringUtils)来生成验证码的内容,然后将其存储在Session中以便后续验证。 2. **视图展示**:验证码需要显示在用户界面上,这可以...
6. **JSP页面**:前端展示部分,包括生成验证码的图片和输入框,以及提交验证的按钮。使用Ajax技术与后台进行交互,实现实时刷新和验证功能。 7. **安全注意事项**:在实现过程中,要考虑到安全性问题,比如防止...
总之,"一个简单的Struts2验证码"涉及到的是在Struts2框架下实现验证码功能的全过程,涵盖了从生成验证码到用户验证的各个步骤。理解并掌握这个过程对于提升web应用的安全性和防止自动化攻击至关重要。
例如,你可能会有一个名为`GenerateCaptchaAction`的类,负责生成验证码,并将其存入session,然后在`login.jsp`这样的页面中,通过`<s:property>`标签来显示验证码图片。 此外,为了提高验证码的安全性,可以考虑...
"struts2-生成图片验证码"的主题表明我们将探讨如何在Struts2框架中实现图片验证码的功能。 验证码通常由随机生成的一串字符组成,这些字符以图像形式显示,用户需要输入他们看到的字符以完成验证。在Struts2中实现...
在JSP页面上,你需要添加一个img标签来显示生成的验证码图像。图像的src属性应指向之前定义的Action。 5. **表单验证**: 用户填写表单并提交时,Struts的验证机制会检查用户输入的验证码是否与session中存储的值...
综上所述,Struts2验证码的实现利用了Java AWT库来生成内存中的图片,结合Struts2框架的流结果类型,实现了动态生成并返回验证码的功能。这种技术提高了网站安全性,防止了自动化脚本的恶意操作,同时通过JavaScript...
1. **生成验证码**: - 定义验证码的宽度和高度。 - 使用`RandomStringUtils.random`方法生成随机字符串。 - 将生成的随机字符串存储到`HttpSession`中。 2. **绘制验证码图片**: - 创建一个`BufferedImage`...
3. **结果类型(Result)**:生成验证码后,需要将生成的图像返回给客户端。你可以配置一个特定的结果类型,如“stream”,用于输出图像流到HTTP响应中。 4. **JSP/FreeMarker模板**:前端页面上需要有一个表单让...
1. **生成验证码**:创建一个Java类,用于生成随机的字符串或数字。这个类可能包含一个方法,返回一个指定长度的字符串,例如包含4位数字。我们可以使用Java的`Random`类和`StringBuilder`类来实现这一功能。 2. **...
一个登录验证生成验证码用struts 后台生成验证码在jsp页面输出生成图片
在这个目录下,你会找到Action类、Service类、DAO(数据访问对象)类、配置文件如struts.xml、spring-servlet.xml、web.xml,以及用于生成和验证验证码的类或组件。例如,验证码可能通过Servlet生成并存储在Session...
在这个案例中,Action负责处理与验证码相关的请求,可能包括生成验证码、验证用户输入的验证码以及处理相关的业务逻辑。 2. **JSP**:Java Server Pages是用于动态生成HTML、XML或其他类型的Web内容的Java技术。在...
在这个Struts2的项目案例中,开发者已经创建了一个完整的流程,包括生成验证码的逻辑以及将其整合到Struts2框架中的方法。 验证码的生成通常包含以下几个步骤: 1. **随机生成数字或字母**:验证码通常由随机选择...
- **生成验证码页面**:可能名为`generateVerifyCode.jsp`,它调用Action生成验证码并显示在图像上。通常,这个页面会通过JavaScript设置一个隐藏字段来存储验证码的值,以便在后续提交时验证。 - **显示表单页面*...
Action可能包含一个方法,该方法生成验证码并将其设置到Session中。 - 同时,还需要配置一个结果(Result)类型,比如`stream`,用于将生成的验证码图片直接输出到浏览器。 3. **JSP页面**: - 登录页面的HTML或...