VerifyCodeServlet(一次性验证码)

通过在表单中总是需要使用一次性验证码,这一问题可以使用VerifyCodeServlet来处理。让<img>元素的src指向VerifyCodeServlet即可在页面中生成一次性验证码。而且VerifyCodeServlet还会把验证码保存到session中,名称为:vCode,也就是说,你可以通过session来获取验证码文本:session.getAttribute(“vCode”)。

web.xml
<servlet>
  <servlet-name>VerifyCodeServlet</servlet-name>
  <servlet-class>cn.itcast.vcode.servlet.VerifyCodeServlet</servlet-class>
</servlet>
<servlet-mapping>
  <servlet-name>VerifyCodeServlet</servlet-name>
  <url-pattern>/VerifyCodeServlet</url-pattern>
</servlet-mapping>

MyJsp.jsp

<form action="<c:url value=‘/UserServlet‘/>" method="post">
    <input type="hidden" name="method" value="regist"/>
    验证码:<input type="text" name="verifyCode"/>
<!--让<img>的src指向VerifyCodeServlet即可生成一次性验证码-->
    <img src="<c:url value=‘/VerifyCodeServlet‘/>"  border="1"/><br/>
    <input type="submit" value="注册"/>
</form>

因为用户可能看不清楚图片上的文本,所以我们需要给用户提供一个“换一张”超链接。其实实现这一步很简单,只需要使用javascript让<img>元素src指向VerifyCodeServlet即可。但因为浏览器可能会缓存上一次生成的图片,所以我们还需要使用时间为参数“强迫”浏览器访问服务器,而不是使用缓存。

MyJsp.jsp
<script type="text/javascript" src="<c:url value=‘/js/jquery-1.5.1.js‘/>"></script>
    <script type="text/javascript">
    //在点击“换一张”时会调用本方法
        function change() {
            $("#img").attr("src", "<c:url value=‘/VerifyCodeServlet?‘/>" + new Date().getTime());//指定<img>元素的src属性值为VerifyCodeServlet,并且追加参数为当前时间毫秒,它是不会重复的值,所以浏览器不会使用缓存,而是访问服务器。
        }
    </script>
…
<form action="<c:url value=‘/UserServlet‘/>" method="post">
    <input type="hidden" name="method" value="regist"/>
    验证码:<input type="text" name="verifyCode"/>
<!-- 指定id为img,方法使用jquery来查找该元素-->
    <img id="img"  src="<c:url value=‘/VerifyCodeServlet‘/>" border="1"/>
    <a href="javascript:change();">换一张</a><!--点击该超链接会调用change()方法-->
    <br/>
    <input type="submit" value="注册"/>
</form>

当用户在表单中填写了验证码,而且提交了表单,到达UserServlet的regist()方法,在regist() 方法中需要比较用户在表单中输入的验证码,与验证码图片上的文本是否相同。

  • 获取用户输入的验证码:request.getParameter(“verifyCode”);
  • 获取图片上的验证码:session.getAttribute(“vCode”);
时间: 2024-10-13 13:16:52

VerifyCodeServlet(一次性验证码)的相关文章

简单的Session案例 —— 一次性验证码

一次性验证码的主要目的就是为了限制人们利用工具软件来暴力猜测密码,其原理与利用Session防止表单重复提交的原理基本一样,只是将表单标识号变成了验证码的形式,并且要求用户将提示的验证码手工填写进一个表单字段中,而不是通过表单的隐藏字段自动回传给服务器. 服务器程序接收到表单数据后,首先判断用户是否填写了正确的验证码,只有该验证码与服务器端保存的验证码匹配时,服务器程序才开始正常的表单处理流程. 密码猜测工具要逐一尝试每个密码的前题条件是先输入正确的验证码,而验证码是一次性有效的,这样基本上就阻

Java Web(四) 一次性验证码的代码实现

其实实现代码的逻辑非常简单,真的超级超级简单. 1.在登录页面上login.jsp将验证码图片使用标签<img src="xxx">将绘制验证码图片的url给它 2.在服务器端就两个servlet,一个就是用来绘制验证码图片的VerifyCodeServlet,另一个就是登录时验证验证码是否点写正确或是否重复提交的LoginServlet 3.在VerifyCodeServlet中,将验证码的四个字母存入session中,然后在LoginServlet中,将请求中提交过来的

servlet实现一次性验证码

大致的思路:先用java生成验证码,然后将生成的验证码保存到session中,在表单提交时,将保存到session中的验证码与表单提交的验证码进行比较,然后输出不同的结果.其实还可以实现一个目标,在用户禁用cookie也能验证成功,那就需要url重写了.这个例子只是给了一个简单的验证码的实现,当然可以根据实际的需求写出更加精彩的验证码,比如"汉字"验证码,算术验证码.本文只是给怎样实现验证码提供了一个基本的思路. ImageCodeUtil.java package cn.zq.uti

一次性验证码

import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileReader; import java.io.IOExcepti

JavaWeb 使用Session实现一次性验证码

表单 <form action="loginServlet" method="post"> 请输入验证码:<input type="text" name="code" /> <img src="getCodeServlet" /><br /> <button type="submit">提交</button> <

验证码的实现

function _hyz()//换一张函数JS代码 { /* 1. 获取<img>元素 2. 给它的src指向/tools/VerifyCodeServlet */ var img=document.getElementById("imgVerifyCode"); //需要给出一个参数,这个参数每次都不同,这样才能刷新浏览器缓存! img.src = "/tools/VerifyCodeServlet?a="+ new Date().getTime()

网上图书商城项目学习笔记-006验证码功能

一.使用方法 1.jsp中 1 <tr> 2 <td> </td> 3 <td> 4 <span class="verifyCodeImg"><img id="vCode" width="100" src="<c:url value='/VerifyCodeServlet'/>" /></span> 5 </td> 6

session案例:防止表单重复提交、一次性校验码

session案例1:防止表单重复提交 原理: 1,表单页面由servlet程序生成,servlet为每次产生的表单页面分配一个唯一的随机标识号,并在FORM表单的一个隐藏字段中设置这个标识号,同时在当前用户的Session域中保存这个标识号. 2,当用户提交FORM表单时,负责处理表单提交的serlvet得到表单提交的标识号,并与session中存储的标识号比较,如果相同则处理表单提交,处理完后清除当前用户的Session域中存储的标识号. 3,在下列情况下,服务器程序将拒绝用户提交的表单请求

8 EL、JSTL、MVC、购物车、验证码

1.EL表达式 目的:从作用域中取出共享数据 ${p.属性名称} 使用EL获取当前应用的上下文路径 ${pageContext.getRequest().getContextPath()} 判断集合是否为空: ${empty list}:表示判断List既不能等于null,并且有元素,才会返回false 2.JSTL标签(消除jsp中的java代码) 拷贝jar包:jstl.jar standard.jar <%@ taglib uri="" prefix=""