zoukankan      html  css  js  c++  java
  • web 验证码,草稿,可用

    登录界面:

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>login</title>
    </head>
    <body>
        <!-- web3:项目名,在LoginServlet前必须加项目名,如果不加则默认视为工作空间地址 -->
        <form action="/web3/LoginServlet" method="post">
            username:<input type="text" name="username" /> <br><br>
            password:<input type="password" name="password" /><br><br>
            验证码:<img alt="验证码" src="/web3/RandomImageServlet"><br><br>
            <input type="submit" value="login"> <br>
        </form>
    </body>
    </html>
    View Code

    Servlet:

    public class RandomImageServlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp)
                throws ServletException, IOException {
            resp.setContentType("image/jpeg");
            // 禁止浏览器缓存图片
            // 3种禁止缓存的头字段
            resp.setHeader("expires", "-1");
            resp.setHeader("cache-control", "no-cache");
            resp.setHeader("pragma", "no-cache");
    
            BufferedImage im = new BufferedImage(80, 40, BufferedImage.TYPE_INT_RGB);
            Graphics g = im.getGraphics();
            g.setColor(Color.WHITE);// 设置颜色
            g.fillRect(0, 0, 80, 40);// 填充颜色
            g.setColor(Color.BLACK);
            g.setFont(new Font("TimesRoman", Font.PLAIN, 20));
            String str = generateString();
            g.drawString(str, 15, 15);
    
            // g.drawLine(10, 1, 80, 40);
            paint(g);
            ImageIO.write(im, "jpg", resp.getOutputStream());
    
        }
    
        // 设置线宽
        public void paint(Graphics g) {
            Graphics2D g2d = (Graphics2D) g;
            Stroke st = g2d.getStroke();
            Stroke bs;
            // LINE_TYPE_DASHED
            bs = new BasicStroke(1, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL,
                    0, new float[] { 16, 4 }, 0);
            g2d.setStroke(bs);
            g2d.drawLine(10, 1, 80, 40);
    
            g2d.setStroke(st);
        }
    
        private String generateString() {
            String s = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWZXY0123456789";
            int length = s.length();
            Random ran = new Random();
            StringBuilder sb = new StringBuilder();
            sb.append(s.charAt(ran.nextInt(length)));
            sb.append(s.charAt(ran.nextInt(length)));
            sb.append(s.charAt(ran.nextInt(length)));
            sb.append(s.charAt(ran.nextInt(length)));
            sb.append(s.charAt(ran.nextInt(length)));
            return sb.toString();
        }
    }
  • 相关阅读:
    ShopNum1网店系统:组建电子商务运营团队
    jquery 日期+时间 date & time 插件
    写代码如坐禅:你是哪一类程序员
    杨卫华:新浪微博的架构发展历程
    win7 搜索 在新窗口【打开文件位置】
    架构师应该了解的知识1
    flash cs4 和 flex builder 联合开发
    Div拖动/调整大小实例
    asp.net mvc 2.o 中使用JQuery.uploadify
    jquery 拖动改变div 容器大小
  • 原文地址:https://www.cnblogs.com/mada0/p/4778856.html
Copyright © 2011-2022 走看看