JavaWeb用户信息管理系统-在登录中添加验证码功能

简介: JavaWeb用户信息管理系统-在登录中添加验证码功能

1 验证码生成的servlet

@WebServlet("/validateCode.do")
public class ValidateCodeServlet extends HttpServlet {
  public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
    // 在内存中创建图象
    int width = 70, height = 45;
    BufferedImage image = new BufferedImage(width, height,
        BufferedImage.TYPE_INT_RGB);
    // 获取图形上下文
    Graphics g = image.getGraphics();
    // 生成随机类
    Random random = new Random();
    // 设定背景色
    g.setColor(getRandColor(200, 250));
    g.fillRect(0, 0, width, height);
    // 设定字体
    g.setFont(new Font("Times New Roman", Font.PLAIN, 20));
    // 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到
    g.setColor(getRandColor(160, 200));
    for (int i = 0; i < 155; i++) {
      int x = random.nextInt(width);
      int y = random.nextInt(height);
      int xl = random.nextInt(12);
      int yl = random.nextInt(12);
      g.drawLine(x, y, x + xl, y + yl);
    }
    // 取随机产生的认证码(4位数字)
    String sRand = "";
    for (int i = 0; i < 4; i++) {
      String rand = String.valueOf(random.nextInt(10));
      sRand += rand;
      // 将认证码显示到图象中
      g.setColor(new Color(20 + random.nextInt(110), 20 + random
          .nextInt(110), 20 + random.nextInt(110)));
      // 调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成
      g.drawString(rand, 13 * i + 6, 16);
    }
    // 图象生效
    g.dispose();
    try {
      ImageIO.write(image, "JPEG", response.getOutputStream());
    } catch (Exception e) {
      System.out.println("验证码图片产生出现错误:" + e.toString());
    }
    //保存验证码到Session
    request.getSession().setAttribute(Constants.VALIDATE_CODE_KEY, sRand);
  }
  public void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
    this.doGet(request, response);
  }
  /*
   * 给定范围获得随机颜色
   */
  private Color getRandColor(int fc, int bc) {
    Random random = new Random();
    if (fc > 255)
      fc = 255;
    if (bc > 255)
      bc = 255;
    int r = fc + random.nextInt(bc - fc);
    int g = fc + random.nextInt(bc - fc);
    int b = fc + random.nextInt(bc - fc);
    return new Color(r, g, b);
  }
}

2 验证码标签

<span>
<input name="code" type="text" value="验证码" onclick="JavaScript:this.value=''"/>
</span>
<cite>
<img id="code" src="validateCode.do" onclick="change()">
</cite>

3 修改以前的filter,因为拦截了/validateCode.do


if(uri.indexOf("login.jsp") != -1 || uri.indexOf("login.do") != -1|| uri.indexOf("validateCode.do") != -1)

进行放行,因为验证码是login内嵌,必须展示出来的不能进行拦截。

4 效果

相关实践学习
【玩转ComfyUI】基于函数计算一键部署AI生图平台ComfyUI
本次实验将带大家通过使用阿里云产品函数计算FC,快速使用ComfyUI实现更高质量的图像生成。
从 0 入门函数计算
在函数计算的架构中,开发者只需要编写业务代码,并监控业务运行情况就可以了。这将开发者从繁重的运维工作中解放出来,将精力投入到更有意义的开发任务上。
目录
相关文章
|
存储 缓存 Java
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
2575 3
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
|
缓存 Java 应用服务中间件
java语言后台管理若依框架-登录提示404-接口异常-系统接口404异常如何处理-登录验证码不显示prod-api/captchaImage 404 (Not Found) 如何处理-解决方案优雅草卓伊凡
java语言后台管理若依框架-登录提示404-接口异常-系统接口404异常如何处理-登录验证码不显示prod-api/captchaImage 404 (Not Found) 如何处理-解决方案优雅草卓伊凡
5122 5
|
存储 小程序 前端开发
微信小程序与Java后端实现微信授权登录功能
微信小程序极大地简化了登录注册流程。对于用户而言,仅仅需要点击授权按钮,便能够完成登录操作,无需经历繁琐的注册步骤以及输入账号密码等一系列复杂操作,这种便捷的登录方式极大地提升了用户的使用体验
4008 12
|
小程序 前端开发 算法
|
Java
Java 登录输入的验证码
Java 登录输入的验证码
255 1
|
C#
C# 图形验证码实现登录校验代码
C# 图形验证码实现登录校验代码
659 2
|
存储 JSON 前端开发
node使用token来实现前端验证码和登录功能详细流程[供参考]=‘很值得‘
本文介绍了在Node.js中使用token实现前端验证码和登录功能的详细流程,包括生成验证码、账号密码验证以及token验证和过期处理。
695 0
node使用token来实现前端验证码和登录功能详细流程[供参考]=‘很值得‘
|
Java 测试技术 API
Java 18 新功能介绍
Java 18 新功能介绍
575 0
Java 18 新功能介绍
|
安全 算法 Java
Java 17 新功能介绍(LTS)
Java 17 新功能介绍(LTS)
1156 0
Java 17 新功能介绍(LTS)
|
JavaScript 前端开发 算法
超详细 Java 15 新功能介绍
超详细 Java 15 新功能介绍
450 0
超详细 Java 15 新功能介绍