• java实现验证码登录


    java实现验证码的步骤:

    1.创建验证码的实体类,代码如下

     
    1. import java.awt.BasicStroke;  
    2. import java.awt.Color;  
    3. import java.awt.Font;  
    4. import java.awt.Graphics2D;  
    5. import java.awt.image.BufferedImage;  
    6. import java.io.IOException;  
    7. import java.io.OutputStream;  
    8. import java.util.Random;  
    9.   
    10. import javax.imageio.ImageIO;  
    11.   
    12.   
    13.   
    14. public class VerifyCode {  
    15.     /**  
    16.      *楠岃瘉鐮�  
    17.      * @author 瑕冧匠鍗�  
    18.      */  
    19.       
    20.     private int w = 50;  
    21.     private int h = 25;  
    22.     private Random r = new Random();  
    23.     private String[] fontNames = {"瀹嬩綋","鍗庢枃妤蜂綋","榛戜綋","寰�蒋闆呴粦","妤蜂綋_GB2312"};  
    24.     private String codes = "23456789abcdefghjkmnpqrstuvwxyzABCEFGHIJKLMNPQRSTUVWXYZ";  
    25.     private Color bgColor = new Color(255,255,255);  
    26.     private String text;  
    27.       
    28.     private Color randomColor(){  
    29.         int red = r.nextInt(200);  
    30.         int green = r.nextInt(200);  
    31.         int blue = r.nextInt(200);  
    32.         return new Color(red,green,blue);  
    33.     }  
    34.       
    35.     private Font randomFont(){  
    36.         int index = r.nextInt(fontNames.length);  
    37.         String fontName = fontNames[index];  
    38.         int style = r.nextInt(4);  
    39.         int size = r.nextInt(6)+15;  
    40.         return new Font(fontName,style,size);  
    41.         }  
    42.     private void drawLine(BufferedImage image){  
    43.         int num = 3;  
    44.         Graphics2D g2 = (Graphics2D)image.getGraphics();  
    45.         for(int i=0;i<num;i++){  
    46.             int x1 = r.nextInt();  
    47.             int y1 = r.nextInt();  
    48.             int x2 = r.nextInt();  
    49.             int y2 = r.nextInt();  
    50.             g2.setStroke(new BasicStroke(1.5F));  
    51.             g2.setColor(Color.BLUE);  
    52.             g2.drawLine(x1,y1,x2,y2);  
    53.         }  
    54.     }  
    55.     private char randomChar(){  
    56.         int index = r.nextInt(codes.length());  
    57.         return codes.charAt(index);  
    58.     }  
    59.     private BufferedImage createImage(){  
    60.         BufferedImage image = new BufferedImage(w,h,BufferedImage.TYPE_INT_RGB);  
    61.         Graphics2D g2 = (Graphics2D)image.getGraphics();  
    62.         g2.setColor(this.bgColor);  
    63.         g2.fillRect(0, 0, w, h);  
    64.         return image;  
    65.     }  
    66.     public BufferedImage getImage(){  
    67.         BufferedImage image = createImage();  
    68.         Graphics2D g2 = (Graphics2D)image.getGraphics();  
    69.         StringBuilder sb = new StringBuilder();  
    70.         for(int i= 0;i<4;i++){  
    71.             String s = randomChar()+"";  
    72.             sb.append(s);  
    73.             float x = i*1.0F*w/4;  
    74.             g2.setFont(randomFont());  
    75.             g2.setColor(randomColor());  
    76.             g2.drawString(s, x, h-5);  
    77.         }  
    78.         this.text = sb.toString();  
    79.         drawLine(image);  
    80.         return image;  
    81.     }  
    82.     public String getText(){  
    83.     return text;  
    84.     }  
    85.     public static void output (BufferedImage image,OutputStream out) throws IOException{  
    86.         ImageIO.write(image, "JPEG", out);  
    87.     }  
    88. }  
    89.       

    2.创建验证码的servlet

     
    1. import java.awt.image.BufferedImage;  
    2. import java.io.IOException;  
    3. import java.io.PrintWriter;  
    4. import javax.imageio.ImageIO;  
    5. import javax.servlet.ServletException;  
    6. import javax.servlet.annotation.WebServlet;  
    7. import javax.servlet.http.HttpServlet;  
    8. import javax.servlet.http.HttpServletRequest;  
    9. import javax.servlet.http.HttpServletResponse;  
    10. import util.VerifyCode;  
    11.   
    12. @WebServlet("/VerifyCodeServlet")  
    13. public class VerifyCodeServlet extends HttpServlet {  
    14.   
    15.     /**  
    16.      * Servlet  
    17.      * @author weiqiang  
    18.      */  
    19.       
    20.     public void doGet(HttpServletRequest request, HttpServletResponse response)  
    21.             throws ServletException, IOException {  
    22.           
    23.         VerifyCode vc = new VerifyCode();  
    24.         response.setHeader("Cache-Control", "no-cache");  
    25.         response.setContentType("image/jpeg");  
    26.         BufferedImage bim = vc.getImage();  
    27.         ImageIO.write(bim, "JPEG", response.getOutputStream());  
    28.         String verifycode = vc.getText();  
    29.         request.getSession().setAttribute("verifyCode", verifycode);  
    30.     }  
    31.   
    32.     public void doPost(HttpServletRequest request, HttpServletResponse response)  
    33.             throws ServletException, IOException {  
    34.             doGet(request, response);  
    35.     }  
    36.     public void destroy(){  
    37.         super.destroy();  
    38.     }  
    39.     public void init() throws ServletException{   
    40.     }  
    41.   
    42. }  
    43. 3.在xml中进行配置
    44. servlet>
      <servlet-name>VerifyCodeServlet</servlet-name>
      <servlet-class>cn.com.shxt.servlet.VerifyCodeServlet</servlet-class>
      </servlet>
      <servlet-mapping>
      <servlet-name>VerifyCodeServlet</servlet-name>
      <url-pattern>/VerifyCodeServlet</url-pattern>
      </servlet-mapping>


    3.在需要使用验证码的地方使用如下代码:

    [html] view plain copy
     
    1. <!--这是看不清刷新一下的函数-->  
    2. <script>  
    3. function changeVerifyCode(){  
    4.     document.getElementById("validateCodeImg").src="VerifyCodeServlet?t="+Math.random();  
    5.       
    6. }  
    7. </script>  
    8. <!-- 这是输入验证码的输入框-->  
    9. <INPUT id=txtSN size=name=txtSN>  
    10. <!-- 这是显示的验证码,以图片显示-->  
    11. <!-- src的路劲为servlet的路劲 -->  
    12.                   <img src="<%=basePath%>VerifyCodeServlet" border=id="validateCodeImg" style="height: 25px;  57px"/><href="#" onclick="changeVerifyCode()">看不清?换一张</a></TD>  


    4.实际效果如下

    String code = request.getParameter("code");
    String verifyCode = (String) request.getSession().getAttribute("verifyCode");

    else if(!code.equals(verifyCode)){//登陆失败
    request.setAttribute("message","验证码错误");
    request.getRequestDispatcher("/login.jsp").forward(request, response);

    前台的code和session中的验证码进行比较,实现验证码的功能。

  • 相关阅读:
    9-python 的ProxyHandler处理器(代理设置)
    2018.2.7 css 的一些方法盒子模型
    2018.2.6 JS-判断用户浏览器
    2018.2.5 PHP如何写好一个程序用框架
    2018. 2.4 Java中集合嵌套集合的练习
    2018.2.3 Centos 的vim好看的主题配置及JDK的安装配置
    2018.2.2 java中的Date如何获取 年月日时分秒
    2018.2.2 JavaScript中的封装
    2018.1.30 PHP编程之验证码
    2018.1.29 计算机二级错题汇总(二)
  • 原文地址:https://www.cnblogs.com/yuxiliang/p/6537611.html
Copyright © 2020-2023  润新知