码迷,mamicode.com
首页 > 其他好文 > 详细

验证码

时间:2020-06-07 13:11:50      阅读:295      评论:0      收藏:0      [点我收藏+]

标签:输入验证   xtend   lis   list   exti   enc   程序   except   jpeg   

1、书写servlet,获取验证码的数据,并对验证码进行校验

public class ValidateServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
    
            
            String code = request.getParameter("code");
    
            HttpSession session = request.getSession();
            String randStr = (String)session.getAttribute("randStr");
            response.setCharacterEncoding("gb2312");
            PrintWriter out = response.getWriter();
            if(!code.equals(randStr)){
                out.println("验证码错误");
            }
            else{
                out.println("验证码正确......");
            }        
        
    }

}

 

2、创建登录界面

<%@ page language="java" pageEncoding="gb2312"%>
<html>
    <body>
    <script type="text/javascript">
        function refresh(){
        
    document.getElementById("imgValidate").src="validate.jsp?random="+Math.random();
        }
    </script>
    欢迎登录本系统<BR>
    <form name="loginForm" action="ValidateServlet" method="post">
        请您输入账号:<input type="text" name="account" /><BR>
        请您输入密码: <input type="password" name="password" /><BR>
        请输入验证码:<input type="text" name="code" size="10"/>
        <img name="imgValidate"  id="imgValidate" src="validate.jsp" onclick="refresh()"/><BR>
        <input type="submit" value="登录"/>    
    </form>        
    </body> 
</html>

点击验证码的图片之后会调用validate.jsp生成验证码,但是,在这个过程中会传递一个随机数,在validate.jsp中对数据进行模糊处理,并将数据存储在session中。

 

3、创建生成验证码图片的jsp

<%@ page language="java"
    import="java.awt.*"
    import="java.awt.image.BufferedImage"
    import="java.util.*"
    import="javax.imageio.ImageIO"    
    pageEncoding="gb2312"%>
<%
    response.setHeader("Cache-Control","no-cache"); 
    // 在内存中创建图象 
    int width = 60, height = 20;
    BufferedImage image = new BufferedImage(width, height,
        BufferedImage.TYPE_INT_RGB);
    //获取画笔
    Graphics g = image.getGraphics();
    //设定背景色 
    g.setColor(new Color(200, 200, 200));
    g.fillRect(0, 0, width, height);
    //取随机产生的验证码(4位数字) 
    Random rnd = new Random();
    int randNum = rnd.nextInt(8999) + 1000;
    String randStr = String.valueOf(randNum);
    //将验证码存入session
    session.setAttribute("randStr", randStr);
    //将验证码显示到图象中 
    g.setColor(Color.black);
    g.setFont(new Font("", Font.PLAIN, 20));
    g.drawString(randStr, 10, 17);
    // 随机产生100个干扰点,使图象中的验证码不易被其他程序探测到 
    for (int i = 0; i < 100; i++){
        int x = rnd.nextInt(width);
        int y = rnd.nextInt(height);
        g.drawOval(x, y, 1, 1);
    }
    // 输出图象到页面 
    ImageIO.write(image, "JPEG", response.getOutputStream());
    out.clear();
    out = pageContext.pushBody();
%>

 

4、创建servlet,获取到验证码中的数据

public class ValidateServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
    
            
            String code = request.getParameter("code");
    
            HttpSession session = request.getSession();
            String randStr = (String)session.getAttribute("randStr");
            response.setCharacterEncoding("gb2312");
            PrintWriter out = response.getWriter();
            if(!code.equals(randStr)){
                out.println("验证码错误");
            }
            else{
                out.println("验证码正确......");
            }        
        
    }

}

在该servlet中获取登录页面提交的验证码数据,并获取session中的数据,进行比对。成功的话就登录成功,否则,失败

 

5、在web.xml中配置servlet

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>yanzheng</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  
  <servlet>
      <servlet-name>ValidateServlet</servlet-name>
      <servlet-class>pers.zhb.test.ValidateServlet</servlet-class>
  </servlet>
  <servlet-mapping>
      <servlet-name>ValidateServlet</servlet-name>
      <url-pattern>/ValidateServlet</url-pattern>
  </servlet-mapping>
</web-app>

 

验证码

标签:输入验证   xtend   lis   list   exti   enc   程序   except   jpeg   

原文地址:https://www.cnblogs.com/zhai1997/p/13059864.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!