Servlet自学第24讲:Session应用—验证码功能的实现
2015-05-28 10:12
399 查看
为什么要验证码
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 />
还有一点要注意的是:对于验证码的验证应该放在用户名和密码验证之前验证,这样有利于减轻对数据库访问的负担。(费资源的两个操作:网络和数据库)
相关文章推荐
- Session应用--用servlet写一次性验证码
- Servlet结合Html实现登录验证(包括验证码验证)功能
- 通过servlet实现一个切换验证码的功能
- Session应用--用servlet写一次性验证码
- 使用Servlet实现网页验证码功能
- JAVA验证码功能实现(生成验证码的Servlet)
- java web开发之servlet图形验证码功能的实现
- 用servlet来实现验证码的功能
- jsp+servlet实现验证码功能
- Servlet自学第13讲:使用纯Servlet实现简单登录功能
- Session应用--用servlet写一次性验证码
- Session对象的应用:实现简单的购物车的功能
- Shiro在web应用中实现验证码功能
- JavaWeb学习记录(六)——用户登录功能之Session与验证码验证功能的实现
- jquery+jsp+servlet+ajax实现注册功能,ajax校验用户名、验证码等(转自他人)
- PHP JS CSS session实现验证码功能
- 用Servlet中的HttpServlet实现登录验证码功能
- 使用Servlet实现网页验证码功能
- 实现基础验证码功能的servlet(包括自己实现的算术验证码,加干扰线)
- Servlet , 实现 验证码功能