Servlet自学第24讲:Session应用—验证码功能的实现
来源:互联网 发布:纯音乐听歌写谱软件 编辑:程序博客网 时间:2024/05/14 09:25
为什么要验证码
http请求的底层机制是公开的,某些人可以模拟一个简单的tomcat或者ie不停地向服务器发送请求,造成恶意访问;有的甚至可以通过这种无休止的访问破解用户账号和密码。采用验证码功能在一定程度上能解决这个问题。
(推荐一个网站:www.sourceforge.net开源之祖)
实现原理
使用到了java的绘图技术,采用servlet生成验证码
public class CreateCode extends HttpServlet { protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { int width=80; int height=20; //禁止浏览器缓存图片(缓存的话不能做到实时更新) response.setDateHeader("Expires", -1); response.setHeader("cache-Control", "no-cache"); response.setHeader("Pragma","no-cache"); //通知客户端以图片的方式打开发送过去的数据 response.setHeader("Content-Type", "image/jpeg"); //在内存中创建一副图片 BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_BGR); //向图片中写数据 Graphics g = image.getGraphics(); //设置背景色 g.setColor(Color.red); g.fillRect(0, 0, width, height); //设置写入的数据颜色和字体 g.setColor(Color.black); g.setFont(new Font(null,Font.BOLD,20)); //向图片上写数据 String str =getNum(); //把随机数生成的数值保存到session request.getSession().setAttribute("checkcode", str); g.drawString(str, 2, 18); //把写好的数据输出给浏览器 ImageIO.write(image, "jpg", response.getOutputStream()); } //随机生成数字 private String getNum(){ String str = null; Random r = new Random(); //生成7位 String num = r.nextInt(9999999)+""; //如果不够7位,就前面补零 StringBuffer sb = new StringBuffer(); for(int i=0;i<7-num.length();i++){ sb.append("0"); } str =sb.toString()+ num; return str; } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } @Override public String getServletInfo() { return "Short description"; }// </editor-fold>}
(访问服务器的image时会向服务器请求两次,第一次是定位资源,然后再请求一次加载图片,其实图片就是一个文件)
使用该“图片验证码”的方式为:
< img src=''/验证码servlet的URL />
还有一点要注意的是:对于验证码的验证应该放在用户名和密码验证之前验证,这样有利于减轻对数据库访问的负担。(费资源的两个操作:网络和数据库)
0 0
- Servlet自学第24讲:Session应用—验证码功能的实现
- Servlet自学第25讲:Session实例—简单购物车的实现
- Servlet自学第13讲:使用纯Servlet实现简单登录功能
- Servlet自学第23讲:Session会话技术详解
- Servlet自学第27讲:Session与Cookie对比总结
- Servlet自学第26讲:禁用cookie后还能继续使用session的方法
- Servlet自学第29讲:使用ServletContext实现网站计数器
- Servlet自学第7讲:Servlet简介
- Servlet自学第8讲:Servlet生命周期
- Servlet实现的验证码功能
- Servlet自学第6讲:Tomcat虚拟目录的管理
- Servlet , 实现 验证码功能
- Servlet自学第0讲:开山篇
- Servlet自学第1讲:web入门
- Servlet自学第28讲:ServletContext详解
- Servlet自学第30讲(最后一讲):SQLHelper工具类的改进
- Servlet自学第9讲:使用继承HttpServlet的方法开发Servlet
- Servlet自学第12讲:Servlet的load-on-startup元素及ServletConfig对象
- 【点滴】LINUX之zip/unzip命令
- Qt画图QCustomPlot之安装篇
- c#获取当前日期时间
- ConditionVariable的用法 .
- hihocoder#1066之并查集
- Servlet自学第24讲:Session应用—验证码功能的实现
- 图解aclocal、autoconf、automake、autoheader、configure
- illustrator工具的笔记
- IOS中的block
- CentOS升级Git
- 重构方法之大型重构
- Subsets2
- Rule Engine之Drools
- block学习笔记——详解和使用