前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >案例:一次性图片验证码

案例:一次性图片验证码

作者头像
星哥玩云
发布2022-09-14 21:11:32
2010
发布2022-09-14 21:11:32
举报
文章被收录于专栏:开源部署

1、验证码有啥用

在我们注册时,如果没有验证码的话,我们可以使用URLConnection来写一段代码发出注册请求。甚至可以使用while(true)来注册!那么服务器就废了!

验证码可以去识别发出请求的是人还是程序!当然,如果聪明的程序可以去分析验证码图片!但分析图片也不是一件容易的事,因为一般验证码图片都会带有干扰线,人都看不清,那么程序一定分析不出来。

2、VerifyCode类

现在我们已经有了cn.itcast.utils.VerifyCode类,这个类可以生成验证码图片!下面来看一个小例子。

代码语言:javascript
复制
	public void fun1() throws IOException {
		// 创建验证码类
		VerifyCode vc = new VerifyCode();
		// 获取随机图片
		BufferedImage image = vc.getImage();
		// 获取刚刚生成的随机图片上的文本
		String text = vc.getText() ;
		System.out.println(text);
		// 保存图片
		FileOutputStream out = new FileOutputStream("F:/xxx.jpg");
		VerifyCode.output(image, out); 
	}

3、在页面中显示动态图片

我们需要写一个VerifyCodeServlet,在这个Servlet中我们生成动态图片,然后它图片写入到response.getOutputStream()流中!然后让页面的

元素指定这个VerifyCodServlet即可。

VerifyCodeServlet

代码语言:javascript
复制
public class VerifyCodeServlet extends HttpServlet {
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		VerifyCode vc = new VerifyCode();
		BufferedImage image = vc.getImage();
		String text = vc.getText();
		System.out.println("text:" + text);
		VerifyCode.output(image, response.getOutputStream());
	}
}

index.jsp

代码语言:javascript
复制
<script type="text/javascript">
    	function _change() {
    		var imgEle = document.getElementById("vCode"); 
    		imgEle.src = "/day06_6/VerifyCodeServlet?" + new Date().getTime(); 
    	}
    </script>
...  
  <body>
    <h1>验证码</h1>
    <img id="vCode" src="/day06_6/VerifyCodeServlet"/>
    <a href="javascript:_change()">看不清,换一张</a> 
  </body>

4、在注册页面中使用验证码

代码语言:javascript
复制
    <form action="/day06_6/RegistServlet " method="post">
    	用户名:<input type="text" name="username"/><br/>
    	验证码:<input type="text" name="code" size="3"/>
    	<img id="vCode" src="/day06_6/VerifyCodeServlet"/>
    	<a href="javascript:_change()">看不清,换一张</a>
    	<br/>
        <input type="submit" value="Submit"/>
    </form>

5、RegistServlet

修改VerifyCodeServlet

代码语言:javascript
复制
public class VerifyCodeServlet extends HttpServlet {
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		VerifyCode vc = new VerifyCode();
		BufferedImage image = vc.getImage();
		request.getSession().setAttribute("vCode", vc.getText()); 
		VerifyCode.output(image, response.getOutputStream());
	}
}

RegistServlet

代码语言:javascript
复制
public class RegistServlet extends HttpServlet {
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		
		String username = request.getParameter("username");
		String vCode = request.getParameter("code"); 
		
		String sessionVerifyCode = (String)request.getSession().getAttribute("vCode"); 
		
		if(vCode.equalsIgnoreCase(sessionVerifyCode) ) {
			response.getWriter().print(username + ", 恭喜!注册成功!");
		} else {
			response.getWriter().print("验证码错误!");
		}
	}
}

6、总结验证码案例

VerifyCodeServlet:

​ 生成验证码:VerifyCode vc = new VerifyCode(); BufferedImage image = vc.getImage();

​ 在session中保存验证码文本:request.getSession.getAttribute(“vCode”, vc.getText());

​ 把验证码输出到页面:VerifyCode.output(image, response.getOutputStream);

regist.jsp:

​ 表单中包含username和code字段;

​ 在表单中给出

指向VerifyCodeServlet,用来在页面中显示验证码图片;

​ 提供“看不清,换一张”链接,指向_change()函数;

​ 提交到RegistServlet;

RegistServlet:

​ 获取表单中的username和code;

​ 获取session中的vCode;

​ 比较code和vCode是否相同;

​ 相同说明用户输入的验证码正确,否则输入验证码错误。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、验证码有啥用
  • 2、VerifyCode类
  • 3、在页面中显示动态图片
  • 4、在注册页面中使用验证码
  • 5、RegistServlet
  • 6、总结验证码案例
相关产品与服务
验证码
腾讯云新一代行为验证码(Captcha),基于十道安全栅栏, 为网页、App、小程序开发者打造立体、全面的人机验证。最大程度保护注册登录、活动秒杀、点赞发帖、数据保护等各大场景下业务安全的同时,提供更精细化的用户体验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档