JavaWeb中验证码的实现
在Web程序中,验证码是经常使用的技术之一。Web程序永远面临未知用户和未知程序的探测。为了防止恶意脚本的执行,验证码技术无疑是首选方案之一。本文将讨论如何在JSP和Servlet中使用验证码技术。
验证码的产生思路很简单,在Servlet中随机产生验证码字符序列,并计入session中,JSP中以图片的形式进行显示。当用户在JSP表单中输入验证码并提交时,在相应的Servlet中验证是否与session中保存的验证码一致。下面通过代码,一次演示验证码产生和实现的验证的过程。
1. 验证码的产生
我们需要创建一个名为ValcodeServlet的servlet并在其doGet()方法中完成验证码的产生。首先通过随机数的产生类Random随机产生一个4位的验证码,并将其存入session;然后使用BufferedImage和Graphics类把验证码转为图片,当然为了起到较好的效果,我们需要添加一些干扰线;最后使用ImageIO将图片输出。详细代码如下:
protectedvoiddoGet(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException { // 告知浏览当作图片处理 response.setContentType("image/jpeg"); // 告诉浏览器不缓存 response.setHeader("pragma", "no-cache"); response.setHeader("cache-control", "no-cache"); response.setHeader("expires", "0"); // 产生由4位数字构成的验证码 int length = 4; String valcode = ""; Random rd = new Random(); for(int i=0; i<length; i++) valcode+=rd.nextInt(10); // 把产生的验证码存入到Session中 HttpSession session = request.getSession(); session.setAttribute("valcode", valcode); // 产生图片 int width = 80; int height = 25; BufferedImageimg = newBufferedImage(width, height,BufferedImage.TYPE_INT_RGB); // 获取一个Graphics Graphics g = img.getGraphics(); // 填充背景色 g.setColor(Color.WHITE); g.fillRect(0, 0, width, height); // 填充干扰线50 for(int i=0; i<50; i++){ g.setColor(new Color(rd.nextInt(100)+155,rd.nextInt(100)+155,rd.nextInt(100)+155)); g.drawLine(rd.nextInt(width), rd.nextInt(height),rd.nextInt(width), rd.nextInt(height)); } // 绘制边框 g.setColor(Color.GRAY); g.drawRect(0, 0, width-1, height-1); // 绘制验证码 Font[] fonts = {new Font("隶书",Font.BOLD,18),new Font("楷体",Font.BOLD,18),new Font("宋体",Font.BOLD,18),new Font("幼圆",Font.BOLD,18)}; for(int i=0; i<length; i++){ g.setColor(new Color(rd.nextInt(150),rd.nextInt(150),rd.nextInt(150))); g.setFont(fonts[rd.nextInt(fonts.length)]); g.drawString(valcode.charAt(i)+"", width/valcode.length()*i+2, 18); } // 输出图像 g.dispose(); ImageIO.write(img, "jpeg", response.getOutputStream()); } |
上面的代码只是产生了一个常规的验证码,我们可以根据自己的需要对验证码的产生策略和干扰线进行调整。Servlet编写完毕,别忘了在web.xml中进行配置以便能在JSP中调用,其代码如下:
<servlet> <description></description> <display-name>ValcodeServlet</display-name> <servlet-name>ValcodeServlet</servlet-name><servlet-class>org.icer.jee.valcode.servlet.ValcodeServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>ValcodeServlet</servlet-name> <url-pattern>/ValcodeServlet</url-pattern> </servlet-mapping> |
2. 验证码的显示
产生验证码的servlet编写完毕,并且已经web.xml中进行了配置,那么我们在input.jsp中使用<img />标记以图片的方式调用servlet即可显示验证码。
当然为了能起到验证效果,本例中还包含了简单的表单。为了放置验证码无法识别,此处还提供了看不清点击换一张功能,用户点击图片时重新加载验证码图片(问号是为了放置浏览器缓存而不能实现重新请求图片)。JSP中表单部分代码如下:
<formname="form1"method="post"action="LoginServlet"> 验证码: <inputname="vcode"type="text"class="input02"id="vcode"> <imgsrc="ValcodeServlet"align="absmiddle"title="看不清,点击换一张"onClick="this.src=this.src+'?'"/> <inputtype="submit"name="button"id="button"value=" 提交 "> </form> |
3. 实现验证功能
当表单提交到CheckServlet时,对用户填写的验证码和session中存储的验证码进行比对,根据结果给出不同提示。代码如下:
protectedvoiddoPost(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException { // 获取验证码 String valcode = request.getSession().getAttribute("valcode").toString(); // 获取用户填写的验证码 String vcode = request.getParameter("vcode"); // 进行验证 if(!valcode.equals(vcode)) System.out.println(">>>验证码错误!"); else System.out.println(">>>验证码正确!"); } |
上面只是根据验证情况在控制台进行了输出,使用时根据实际的业务逻辑需求进行修改即可。
总起来说,验证码技术本质上就是利用Java绘图技术把随机产生的验证码字符图形化,并在JSP中以图形调用,最后在用户提交表单后在对应的servlet中进行验证。本文只是提供验证码的基本实现思路,希望大家能灵活应用。
作者:中软卓越天津ETC
转载于:https://www.cnblogs.com/zretc/archive/2013/06/09/3129062.html
JavaWeb中验证码的实现相关推荐
- java验证码技术_验证码技术(JavaWeb 中验证码的实现 )
二.实践 下面通过程序演示验证码产生和实现验证的过程. 1.验证码的产生 创建一个Servlet完成验证码的产生.首先通过随机数的产生类Random随机产生一个4位的验证码, 并将其存入session ...
- javaweb中验证码验证实现
验证码资料:https://pan.baidu.com/s/1tMCtnyy9f1t1ld5feyooDQ 1.注册表页面register.jsp <script type="text ...
- java输入验证码代码,JavaWeb 实现验证码功能(demo)
验证码不用多说,在 WEB-APP 中一般应用于:登录.注册.买某票.秒杀等场景.大家都接触过~可以说是千奇百怪,各式各样. DEMO 目标功能 验证码页面输入. 页面更换验证码(异步实现). 后台验 ...
- java-web中的分层1-dao
今天看了一下java-web中分层的相关的知识,其实对于我们初学者来说,一个好的分层结构不仅仅能让我们很好的清楚自己的逻辑,而且对以后项目的合作也是很重要的,其实我们在网上看一下有很多关于分层的例子, ...
- java web.xml 监听器_十:JavaWeb中的监听器(一)
2.1.基本概念 JavaWeb中的监听器是Servlet规范中定义的一种特殊类,它用于监听web应用程序中的ServletContext, HttpSession和 ServletRequest等域 ...
- java 打开jsp文件_jsp文件怎么打开(java-web中jsp的理解)
jsp文件怎么打开(java-web中jsp的理解)JSP:Java Server Pages.JSP是一种网页的编码格式,不同于HTML的是JSP中是由 HTML中的标签指令 和 Java逻辑代码 ...
- JavaWeb中的乱码解决方法总结
JavaWeb中的乱码解决方法总结 get请求提交中文(参数放在url中) 原因:服务器获取解析url的时候不知道编码规则 修改Tomcat服务器的安装路径下的conf目录下的配置文件server.x ...
- JavaWeb中的Session、SessionListener、在线人数统计
2019独角兽企业重金招聘Python工程师标准>>> JavaWeb中的Session 在JavaWeb中使用HttpSession(以下简称session)对象来表示一个会话. ...
- javaweb中实现分页,持续更新……
大家好,欢迎来到雄雄的小课堂,昨天分享了个分页工具类一个简单的分页工具类,其实,也是为今天的分享做的铺垫,今天,给大家带来的是javaweb实现分页的全过程! 前言:为什么需要分页?假设某大学有人数一 ...
最新文章
- GPUImage简单说明
- 深蓝学院《从零开始手写VIO》作业三
- 让计算机等待的函数_第56p,装饰器,闭包函数的应用
- linux线程能删除自身吗,Linux内核本身和进程的区别 内核线程、用户进程、用户...
- java求字符串数组交集、并集和差集
- Dell笔记本Alienware Command Center监测不到CPU和内存数据
- Python数据库编程
- 大一c语言餐馆叫号系统,专业体检中心排队叫号系统厂家
- 万达商管再次递表港交所:上半年净利润40亿元,外部股东阵容强大
- 读论文——A Joint Model for Aspect-Category Sentiment Analysis with Shared Sentiment Prediction Layer
- python row函数_Python extmath.row_norms方法代码示例
- 猫九先森教你如何优雅的玩
- 37岁程序员裸辞,120天被497家公司拒绝,网友:为自己的冲动买单
- 记一次java实现excel导出
- android ram rom测试工具,RAM与ROM测试方法
- 【Python篇】拟牛顿法面面俱到(一)--牛顿插值法
- 每个人都应该学的技能 - 如何做出好决定
- 中国计量大学计算机专业全国名次多少,中国计量大学实力水平如何,全国排名是多少?...
- 手机否总是欠费?一波操作,让你一目了然手机偷偷订了哪些业务
- 国内有哪些VPS值得推荐?
热门文章
- 保姆级!!前端必会Taro入门级教学!!
- React开发(116):ant design search引入
- Taro+react开发(26)taro基本骨架
- [html] 如何垂直居中<img>?
- [vue] 怎么解决vue动态设置img的src不生效的问题
- 前端学习(2737):重读vue电商网站47之生成打包报告
- 前端学习(2661):生命周期
- 前端学习(2462):打包优化
- “约见”面试官系列之常见面试题第二十三篇之get和post区别(建议收藏)
- 前端学习(1891)vue之电商管理系统电商系统之el-table渲染表格