架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 6138|回复: 7

[JavaEE] 登陆页面怎么实现验证码校验?????

[复制链接]
发表于 2019-3-19 00:16:43 | 显示全部楼层 |阅读模式
<html页面>
<tr>
      <td class="td_left">
         <label for="check">验证码</label>
      </td>
      <td class="td_right check">
         <input type="text" id="check" name="check" class="check">
         <img src="checkCodeServlet" height="32px" alt="" onclick="changeCheckCode(this)">
<script type="text/javascript">
   //图片点击事件
   function changeCheckCode(img) {
      img.src="checkCodeServlet?"+new Date().getTime();
                               }
</script>
      </td>
   </tr>//验证码拼接部分public class CheckCodeServlet extends HttpServlet {
   @Override
   public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
      
      //服务器通知浏览器不要缓存
      response.setHeader("pragma","no-cache");
      response.setHeader
("cache-control","no-cache");
      response.setHeader
("expires","0");
      
      
//在内存中创建一个长80,宽30的图片,默认黑色背景
      //参数一:长
      //参数二:宽
      //参数三:颜色
      int width = 80;
      
int height = 30;
      BufferedImage image =
new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
      
      
//获取画笔
      Graphics g = image.getGraphics();
      
//设置画笔颜色为灰色
      g.setColor(Color.GRAY);
      
//填充图片
      g.fillRect(0,0, width,height);
      
      
//产生4个随机验证码,12Ey
      String checkCode = getCheckCode();
      
//将验证码放入HttpSession
      request.getSession().setAttribute("code",checkCode);
      
      
//设置画笔颜色为黄色
      g.setColor(Color.YELLOW);
      
//设置字体的小大
      g.setFont(new Font("黑体",Font.BOLD,24));
      
//向图片上写入验证码
      g.drawString(checkCode,15,25);
      
      
//将内存中的图片输出到浏览器
      //参数一:图片对象
      //参数二:图片的格式,如PNG,JPG,GIF
      //参数三:图片输出到哪里去
      ImageIO.write(image,"PNG",response.getOutputStream());
   
}
   /**
    * 产生4位随机字符串
    */
   private String getCheckCode() {
      String base = "0123456789ABCDEFGabcdefg";
      
int size = base.length();
      Random r =
new Random();
      StringBuffer sb =
new StringBuffer();
      
for(int i=1;i<=4;i++){
         //产生0size-1的随机值
         int index = r.nextInt(size);
         
//base字符串中获取下标为index的字符
         char c = base.charAt(index);
         
//c放入到StringBuffer中去
         sb.append(c);
      
}
      return sb.toString();
   
}
   @Override
   public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      this.doGet(request,response);
   
}
}


怎么实现?










上一篇:Android 7.0 之后抓包 unknown 和证书无效的解决方案
下一篇:《编写高质量代码:改善C++程序的150个建议》李健(作者...
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2019-3-19 09:13:39 | 显示全部楼层


原理,用户获取验证码的时候,把验证码字符串存入session,用户提交验证码的时候,在和session里面的字符串对比。
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2019-3-19 09:41:21 | 显示全部楼层
比较的时候,转化大小写
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2019-3-20 13:14:55 | 显示全部楼层
QWERTYU 发表于 2019-3-19 09:41
比较的时候,转化大小写

感谢大佬
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2019-3-20 13:15:34 | 显示全部楼层
小渣渣 发表于 2019-3-19 09:13
原理,用户获取验证码的时候,把验证码字符串存入session,用户提交验证码的时候,在和session里面的字符 ...

感谢大佬 小白的问题 问的比较low
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2019-3-20 13:24:54 | 显示全部楼层
蒲志斌 发表于 2019-3-20 13:15
感谢大佬 小白的问题 问的比较low

没事,都是从小白走过来的
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2019-3-20 15:39:42 | 显示全部楼层
小渣渣 发表于 2019-3-19 09:13
原理,用户获取验证码的时候,把验证码字符串存入session,用户提交验证码的时候,在和session里面的字符 ...

哥  我们后面有个作业是做省市区三级联动 这个应该怎么弄    方法我加您微信
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2019-3-20 15:45:50 | 显示全部楼层
蒲志斌 发表于 2019-3-20 15:39
哥  我们后面有个作业是做省市区三级联动 这个应该怎么弄    方法我加您微信 ...

自己做吧。

html页面有3个select下拉框,用户选择下拉框的时候,触发change事件,带着参数id向接口请求数据,把返回的数据,动态添加到下一级的下拉框,大体思路就是这样。
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2024-4-28 04:45

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表