随机生成验证码

蔚落 2022-05-14 14:28 505阅读 0赞
  1. //login.jsp加入
  2. <dt>验证码</dt>
  3. <dd>
  4. <input type="text" name="code" size="8" maxlength="4" />
  5. <img align="middle" src="VerifyCodeServlet" title="看不清,点击换一张"
  6. onclick="this.src=this.src+'?'+<%=new Date().getTime()%>"/><span>${errorMsg}</span>
  7. </dd>

loginServlet添加

  1. String loginCode=request.getParameter("code");
  2. UserService service=new UserService();
  3. boolean flagCode=service.isCodeEqual(loginCode, request);

service创建isCodeEqual方法

  1. // 验证码验证
  2. public boolean isCodeEqual(String loginCode, HttpServletRequest request) {
  3. // TODO Auto-generated method stub
  4. boolean flag = false;
  5. // 获取session中的code
  6. String sessionCode = (String) request.getSession().getAttribute("code");
  7. System.out.println("session" + sessionCode);
  8. System.out.println("login" + loginCode);
  9. if (loginCode != null && sessionCode.equalsIgnoreCase(loginCode)) {
  10. flag = true;
  11. }
  12. return flag;
  13. }

随机四位验证码生成

  1. package com.db.servlet;
  2. import java.awt.Color;
  3. import java.awt.Font;
  4. import java.awt.Graphics;
  5. import java.awt.image.BufferedImage;
  6. import java.io.IOException;
  7. import java.util.Random;
  8. import javax.imageio.ImageIO;
  9. import javax.servlet.ServletException;
  10. import javax.servlet.annotation.WebServlet;
  11. import javax.servlet.http.HttpServlet;
  12. import javax.servlet.http.HttpServletRequest;
  13. import javax.servlet.http.HttpServletResponse;
  14. import javax.servlet.http.HttpSession;
  15. @WebServlet("/VerifyCodeServlet")
  16. public class VerifyCodeServlet extends HttpServlet {
  17. private static final long serialVersionUID = 1L;
  18. /**
  19. * @see HttpServlet#HttpServlet()
  20. */
  21. public VerifyCodeServlet() {
  22. super();
  23. // TODO Auto-generated constructor stub
  24. }
  25. /**
  26. * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
  27. * response)
  28. */
  29. protected void doGet(HttpServletRequest request,
  30. HttpServletResponse response) throws ServletException, IOException {
  31. response.setContentType("image/jpeg");
  32. // 设置页面不缓存
  33. response.setHeader("Pragma", "No-cache");
  34. response.setHeader("Cache-Control", "no-cache");
  35. response.setDateHeader("Expires", 0);
  36. // 在内存中创建图像
  37. int width = 90;
  38. int height = 35;
  39. BufferedImage image = new BufferedImage(width, height,
  40. BufferedImage.TYPE_INT_RGB);
  41. // 获取图形上下文
  42. Graphics g = image.getGraphics();
  43. // 随机类
  44. Random random = new Random();
  45. // 设定背景
  46. g.setColor(getRandColor(200, 250));
  47. g.fillRect(0, 0, width, height);
  48. // 设定字体
  49. g.setFont(new Font("Times New Roman", Font.PLAIN, 30));
  50. // 随机产生干扰线
  51. g.setColor(getRandColor(160, 200));
  52. for (int i = 0; i < 100; i++) {
  53. int x = random.nextInt(width);
  54. int y = random.nextInt(height);
  55. int xl = random.nextInt(12);
  56. int yl = random.nextInt(12);
  57. g.drawLine(x, y, x + xl, y + yl);
  58. }
  59. // 随机产生4位验证码
  60. String[] codes = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
  61. "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L",
  62. "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X",
  63. "Y", "Z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j",
  64. "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v",
  65. "w", "x", "y", "z" };
  66. String code = "";
  67. for (int i = 0; i < 4; i++) {
  68. String str = codes[random.nextInt(codes.length)];
  69. code += str;
  70. // 将认证码显示到图象中
  71. g.setColor(new Color(50 + random.nextInt(110), 20 + random
  72. .nextInt(110), 30 + random.nextInt(110)));
  73. // 调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成
  74. g.drawString(str, 18 * i + 13, 27); // 文字间距*i+距离左边距,上边距
  75. }
  76. HttpSession session = request.getSession();
  77. // 将认证码存入SESSION
  78. session.setAttribute("code", code);
  79. // 图象生效
  80. g.dispose();
  81. // 输出图象到页面
  82. ImageIO.write(image, "JPEG", response.getOutputStream());
  83. // 加上下面代码,运行时才不会出现java.lang.IllegalStateException: getOutputStream() has
  84. // already been called ..........等异常
  85. response.getOutputStream().flush();
  86. response.getOutputStream().close();
  87. response.flushBuffer();
  88. }
  89. // 获取随机颜色
  90. private Color getRandColor(int fc, int bc) {
  91. Random random = new Random();
  92. if (fc > 255)
  93. fc = 255;
  94. if (bc > 255)
  95. bc = 255;
  96. int r = fc + random.nextInt(bc - fc);
  97. int g = fc + random.nextInt(bc - fc);
  98. int b = fc + random.nextInt(bc - fc);
  99. return new Color(r, g, b);
  100. }
  101. /**
  102. * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
  103. * response)
  104. */
  105. protected void doPost(HttpServletRequest request,
  106. HttpServletResponse response) throws ServletException, IOException {
  107. // TODO Auto-generated method stub
  108. }
  109. }

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpdWp1Y2Fp_size_27_color_FFFFFF_t_70

发表评论

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

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

相关阅读