Java Web实现登录页面验证码验证功能
一、验证码
验证码本质上是一张图片,图片内容会随着程序的运行而随机生成
验证码的作用:防止应用恶意发送数据,一定程度上避免了恶意程序对网站的攻击。
验证码本质上是一张图片,图片内容的准确解析不容易用程序来实现。
验证码的绘制:绘制验证码图片不仅仅需要随机生成要绘制的内容,同时要配合Java中与绘图有关的一套API来完成。
二、效果演示
验证码Demo
三、给出完整代码
(1)服务器端代码ActionServlet.java
packagesession; importjava.io.IOException; importjavax.servlet.ServletException; importjavax.servlet.http.HttpServlet; importjavax.servlet.http.HttpServletRequest; importjavax.servlet.http.HttpServletResponse; importjavax.servlet.http.HttpSession; /** *服务器端合并Servlet * *@authorQianliangGuo */ publicclassActionServletextendsHttpServlet{ @Override protectedvoidservice(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{ //设置编码 request.setCharacterEncoding("utf-8"); //获得session HttpSessionsession=request.getSession(); //设置session超时时间为10秒 //session.setMaxInactiveInterval(10); //获得请求路径 Stringuri=request.getRequestURI(); //拆分路径,只保留login.do中的login Stringaction=uri.substring(uri.lastIndexOf("/")+1,uri.lastIndexOf(".")); //判断请求路径是否为登录 if(action.equals("login")){ Stringuname=request.getParameter("uname"); Stringpwd=request.getParameter("pwd"); //获得用户提交的验证码字符 Stringvhttp://dh.wk163.comhttp://dh.wk163.comcode=request.getParameter("vhttp://dh.wk163.comhttp://dh.wk163.comcode"); //获得session中存储的最新验证码字符 Stringhttp://dh.wk163.comhttp://dh.wk163.comcode=session.getAttribute("http://dh.wk163.comhttp://dh.wk163.comcode").toString(); if(http://dh.wk163.comhttp://dh.wk163.comcode.equals(vhttp://dh.wk163.comhttp://dh.wk163.comcode)&&uname.equals("123")&&pwd.equals("123")){ //将登录的用户绑定到session session.setAttribute("uname",uname); //重定向到index.jsp //response.sendRedirect("index.jsp"); //如果禁用了Cookie,使用URL重写 response.sendRedirect(response.enhttp://dh.wk163.comhttp://dh.wk163.comcodeRedirectURL("index.jsp")); }else{ //登录失败,就转发到login.jsp request.setAttribute("msg","输入有误,请重新登录!"); request.getRequestDispatcher("login.jsp").forward(request,response); } }elseif(action.equals("logout")){ //使session失效 session.invalidate(); response.sendRedirect("login.jsp"); } } }
(2)绘制验证码CodeServlet.java
packagesession; importjava.awt.Color; importjava.awt.Font; importjava.awt.Graphics; importjava.awt.image.BufferedImage; importjava.io.IOException; importjava.io.OutputStream; importjava.util.Random; importjavax.imageio.ImageIO; importjavax.servlet.ServletException; importjavax.servlet.http.HttpServlet; importjavax.servlet.http.HttpServletRequest; importjavax.servlet.http.HttpServletResponse; importjavax.servlet.http.HttpSession; /** *绘制验证码 * *@authorQianliangGuo */ publicclassCodeServletextendsHttpServlet{ @Override protectedvoidservice(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{ //验证码的servlet //0.创建空白图片 BufferedImageimage=newBufferedImage(100,30,BufferedImage.TYPE_INT_RGB); //1.获取图片画笔 Graphicsg=image.getGraphics(); Randomr=newRandom(); //2.设置画笔颜色 g.setColor(newColor(r.nextInt(255),r.nextInt(255),r.nextInt(255))); //3.绘制矩形的背景 g.fillRect(0,0,100,30); //4.调用自定义的方法,获取长度为5的字母数字组合的字符串 Stringnumber=getNumber(5); //获得session HttpSessionsession=request.getSession(); //设置sesssion失效时间为30秒 //session.setMaxInactiveInterval(30); //将这5个随机字符绑定到session中 session.setAttribute("http://dh.wk163.comhttp://dh.wk163.comcode",number); g.setColor(newColor(0,0,0)); g.setFont(newFont(null,Font.BOLD,24)); //5.设置颜色字体后,绘制字符串 g.drawString(number,5,25); //6.绘制8条干扰线 for(inti=0;i<8;i++){ g.setColor(newColor(r.nextInt(255),r.nextInt(255),r.nextInt(255),r.nextInt(255))); g.drawLine(r.nextInt(100),r.nextInt(30),r.nextInt(100),r.nextInt(30)); } response.setContentType("img/jpeg"); OutputStreamops=response.getOutputStream(); ImageIO.write(image,"jpeg",ops); ops.close(); } privateStringgetNumber(intsize){ Stringstr="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; Stringnumber=""; Randomr=newRandom(); for(inti=0;i(2)登录页面login.jsp
<%@pagelanguage="java"import="java.util.*"pageEncoding="utf-8"%> <% Objectmsg=request.getAttribute("msg"); if(msg!=null){ %> <%=msg.toString()%> <%}%>用户名: 密码: 验证码:
(3)展示验证码的页面validateCode.jsp
<%@pagelanguage="java"import="java.util.*"pageEncoding="utf-8"%>验证码 .s1{ cursor:pointer; } (5)index.jsp
<%@pagelanguage="java"import="java.util.*"pageEncoding="utf-8"%> <% //小脚本:session验证 Objectuname=session.getAttribute("uname"); if(uname==null){ //重定向到login.jsp response.sendRedirect("login.jsp"); return; } %>欢迎登录:<%=uname.toString()%>
退出 总结
以上所述是小编给大家介绍的JavaWeb实现登录页面验证码验证功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。