- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
19_验证码跟文件上传下载新
第19讲 验证码和文件上传下载 本课教学内容 使用JSP验证码 验证码开发 认识文件上传 实现文件上传 文件下载 使用 JSP 验证码 验证码有什么作用呢?假想该系统没有验证码,直接通过用户名和密码登录,那么就有 可能有恶意的用户不停输入用户名和密码进行登录试探,或者他使用一个输入程序(俗称机器人程序)不停登录,有理由相信总有一天他是能够破解密码的,就可以使用别人的账号了。 或者即使他没有破解,只是不停的在登录,服务器每次都会验证数据库,也会严重的降低服 务器的效率,导致其他人不能使用。但是有了验证码之后,就可以避免这种现象 使用 JSP 验证码 每登录一次服务器,客户都需要提供一次验证码,而验证码每次都是不同的。所以很难使用机器人程序反复登录,因为机器人程序无法认识验证码。这就是验证码强大的功能所在 使用 JSP 验证码 所谓验证码,就是由服务器产生的一串随机数字或符号,形成一幅图片,图片应该传给客户端,为了防止客户端用一些程序来进行自动识别,图片中通常要加上一些干扰象素,由用户肉眼识别其中的验证码信息。客户输入表单提交时,验证码也提交给网站服务器,只有验证成功,才能执行实际的数据库操作 使用 JSP 验证码 验证码必须满足以下几个性质: 不同的请求,得到的验证码应该是随机的,或者是无法预知的,必须由服务器端产生 验证码必须通过人眼识别,而通过图像编程的方法编写的机器人程序在客户端运行,几乎无法识别。这就是验证码都比较歪斜或者模糊的原因,否则就很容易通过图像处理算法来识别 使用 JSP 验证码 验证码必须满足以下几个性质: 除了人眼观察之外,客户端无法通过其他手段获取验证码信息。这就是验证码为什么用图片,而不是直接用一个数字文本在页面上显示的原因,因为客户端可能通过访问网页源代码的方式获取验证码的内容 使用 JSP 验证码 验证码的工作流程如下: 服务器端随机生成验证码字符串,保存在session 中,并写入图片,将图片连同表单发给客户端 客户端输入验证码,并提交,服务器端获取客户提交的验证码,和前面产生的的随机验证码字符串相比较;如果相同,则继续进行表单所描述的操作(如登录、注册等);如果不同,直接将错误信息返回给客户端。避免程序的继续运行以及访问数据库 验证码开发-1 //获取随机颜色 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 public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //禁止缓存图片 response.setHeader(Pragma, No-cache); response.setHeader(Cache-Control, No-cache); response.setDateHeader(Expires, 0); 验证码开发-3 // 指定生成的响应是图片 response.setContentType(image/jpeg);//text/html (MIME) int width = 70;//图片宽度 int height = 17;//图片高度 BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);//图片缓冲区对象 Graphics g = image.getGraphics();//图像 g.setColor(getRandColor(200, 250));//设置随机背景颜色 g.fillRect(0, 0, width, height);//绘出一个矩形 验证码开发-4 //画随机的干扰线条 Graphics2D g2d=(Graphics2D)g;//2D图像 Random random = new Random(); Font mFont = new Font(“华文宋体”, Font.BOLD, 17);//图像中字体字形字号 g.setFont(mFont)
文档评论(0)