jsp 实现验证码功能

矫情吗;* 2022-08-10 14:52 376阅读 0赞

参考网上例子实现登录验证码功能,生成 jpeg 格式的图片。

jsp:

  1. <div id="loginin">
  2. <h3>后台管理系统登录:</h3>
  3. <form name="loginForm" method="post">
  4. <ul>
  5. <li>用户名:<input type="text" name="username" id="username" /></li>
  6. <li>密 码:<input type="password" id="password" name="password" /></li>
  7. <li>验证码:<input type="text" name="yzm" id="yzm" /></li>
  8. <li><img src="image.jsp" /></li>//此处生成验证码图片
  9. </ul>
  10. <input type="submit" value="登录" name="submit" class="submit" οnclick="checkInsert()" />
  11. ${message}
  12. </form>
  13. </div>

image.jsp:

  1. <%@ page language="java" contentType="image/JPEG"
  2. pageEncoding="gbk"%>
  3. <%@ page import="java.awt.*, java.awt.image.*, java.util.*, javax.imageio.*" %>
  4. <%!Color getRandColor(int fc,int bc) { // 给定范围获取随机颜色
  5. Random random = new Random() ;
  6. if( fc > 255 ){
  7. fc = 255 ;
  8. }
  9. if( bc > 255 ){
  10. bc = 255 ;
  11. }
  12. int r = fc + random.nextInt(bc - fc) ;
  13. int g = fc + random.nextInt(bc - fc) ;
  14. int b = fc + random.nextInt(bc - fc) ;
  15. return new Color(r, g, b) ;
  16. }
  17. %>
  18. <%
  19. // 设置页面不缓存
  20. response.setHeader("Pragma", "No-cache") ;
  21. response.setHeader("Cache-Control", "no-cache") ;
  22. response.setDateHeader("Expires", 0) ;
  23. // 在内存中创建图像
  24. int width = 60 ;
  25. int height = 20 ;
  26. BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB) ;
  27. // 获取图形上下文
  28. Graphics g = image.getGraphics() ;
  29. // 生成随机类
  30. Random random = new Random() ;
  31. // 设定背景色
  32. g.setColor(getRandColor(200, 250)) ;
  33. g.fillRect(0, 0, width, height) ;
  34. // 设置字体
  35. g.setFont(new Font("Times New Roman", Font.PLAIN, 18)) ;
  36. // 画边框
  37. /* g.setColor(Color.red) ;
  38. g.drawRect(0, 0, width-1, height-1) ; */
  39. // 随机产生 155 条干扰线, 使图像中的验证码不易被其他程序探测到
  40. g.setColor(getRandColor(160, 200)) ;
  41. for(int i = 0; i < 100; i ++){
  42. int x = random.nextInt(width) ;
  43. int y = random.nextInt(height) ;
  44. int x1 = random.nextInt(40) ;
  45. int y1 = random.nextInt(40) ;
  46. g.drawLine(x, y, x+x1, y+y1) ;
  47. }
  48. // 取随机产生的验证码: 4位数
  49. String sRand = "" ;
  50. int StringX = (width-6)/4 ;
  51. int StringY = height-4 ;
  52. for(int i = 0; i < 4; i ++) {
  53. String rand = String.valueOf(random.nextInt(10)) ;
  54. sRand += rand ;
  55. // 将验证码显示到图片中
  56. g.setColor(new Color(10+random.nextInt(110), 20+random.nextInt(110), 20+random.nextInt(110))) ;
  57. g.drawString(rand, StringX*i + 6, StringY) ;
  58. }
  59. // 将验证码放到 SESSION 中
  60. session.setAttribute("system_yzm", sRand) ;
  61. //System.out.println("system_yzm: "+sRand) ;
  62. // 图像生效
  63. g.dispose() ;
  64. // 输出图像到页面
  65. ImageIO.write(image, "JPEG", response.getOutputStream()) ;
  66. out.clear() ;
  67. out = pageContext.pushBody() ;
  68. %>

发表评论

表情:
评论列表 (有 0 条评论,376人围观)

还没有评论,来说两句吧...

相关阅读

    相关 JavaSwing实现验证功能

    在Web应用程序开发中,验证码(CAPTCHA)是一种常见的安全措施,用于防止自动化机器人和恶意软件对网站进行攻击。本文将介绍如何使用JavaSwing来实现验证码功能,以帮助

    相关 js实现验证功能

    \前面是拆解着讲的,不想看可以直接跳过,带注释的完整版代码和效果在后面 首先在页面中准备一个输入框,一个显示验证码的盒子和一个提交按钮 <body>

    相关 javaweb实现验证功能

    在javaweb的用户注册与登陆功能时,有时为了防止漏洞或者大量注册,可以使用验证码功能,下面是验证码的一个简单实现 验证码类 public class V

    相关 邮箱验证功能实现

    在进行实际项目的开发过程中,我们可能会遇到需要需要对用户账号密码进行找回,这时就需要我们通过邮件进行验证,从而对用户信息进行修改,下面我就将自己开发过程中的邮件发送功能简单描述