博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java实现登录验证码
阅读量:5147 次
发布时间:2019-06-13

本文共 3668 字,大约阅读时间需要 12 分钟。

登录验证码

Servlet

/*

  • 从请求中获取数据,获取验证码的session的值转为String类型,      
  • 销毁,防止返回后验证码不刷新,重新验证成功      
  • 判断验证码是否相同(忽略大小写)  
  • 相同:创建user对象调用service层的方法验证返回结果是否为空      
     为空:创建session:储存错误信息,转发,登录页面显示登录名或密码错误    
     不为空:创建session:储存用户名,转发,到登录成功页面      
  • 不相同:创建session:储存错误信息,登录页面显示验证码错误(判断如果session为null不显示) 
public class Servlet extends HttpServlet {  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {      Login login = new service.impl.Login();   String username =request.getParameter("username");  String password = request.getParameter("password");   String code = request.getParameter("code");        Object checkcode1 = request.getSession().getAttribute("checkcode");String checkcode = (String) checkcode1;        request.getSession().removeAttribute("checkcode");        if (checkcode!=null&&code.equalsIgnoreCase(checkcode)){      User u=new User();            u.setUsername(username);            u.setPassword(password);    User user = login.Login(u);   if (user!=null){                request.getSession().setAttribute("username",username)         request.getRequestDispatcher("Success.jsp").forward(request,response);      }else{                request.getSession().setAttribute("userfail","用户名或密码错误");                request.getRequestDispatcher("index.jsp").forward(request,response);       }        }else{            request.getSession().setAttribute("codefail","验证码错误");    request.getRequestDispatcher("index.jsp").forward(request,response);        }                   }

CheckcodeServlet

public class CheckcodeServlet extends HttpServlet {    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {       //定义验证码框的长宽      int width = 100;     int height = 50;    //创建image对象       BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);    //创建画笔对象    Graphics graphics = image.getGraphics();     //设置画笔颜色      graphics.setColor(Color.white);       //填充背景      graphics.fillRect(0, 0, width, height);        //重新设定画笔颜色        graphics.setColor(Color.BLUE);     //画验证码的边框      graphics.drawRect(0, 0, width - 1, height - 1);    //将验证码所要显示的内容组成字符串       String s = "QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm1234567890";   //创建随机数对象        Random random = new Random();      //创建颜色数组       Color[] colors = {Color.red, Color.BLACK, Color.magenta, Color.YELLOW, Color.GREEN};   //创建builder对象用于组合验证码       StringBuilder builder = new StringBuilder();    //for循环画验证码    for (int i = 1; i <= 4; i++) {         //每个字母换一个颜色            graphics.setColor(colors[new Random().nextInt(colors.length)]);     //随机生成字符串下标          int index = random.nextInt(s.length());  //通过字符串下标拿到字符        char c = s.charAt(index);       //组合字符串          builder.append(c);     //设置验证码的字体       graphics.setFont(new Font("Comic Sans MS", Font.BOLD, 20));       //验证码所要摆放的位置     graphics.drawString(c + "", width / 5 * i, height / 2);       }       //将验证码转为String类型      String s1 = builder.toString();     //存放在session中        request.getSession().setAttribute("checkcode", s1);        //for循环画干扰线  for (int i = 0; i < 30; i++) {         //设置干扰线颜色         graphics.setColor(colors[new Random().nextInt(colors.length)]);   //设置干扰线坐标           int x = random.nextInt(width);    int y = random.nextInt(height);     int x1 = random.nextInt(30);       int y1 = random.nextInt(30);     int sin = random.nextBoolean() ? 1 : -1;      int cos = random.nextBoolean() ? 1 : -1;            graphics.drawLine(x, y, x + x1 * sin, y + y1 * cos);        }      //输出验证码框    ImageIO.write(image, "jpg", response.getOutputStream());  }

转载于:https://www.cnblogs.com/JaminYe/p/10459453.html

你可能感兴趣的文章
海上孤独的帆
查看>>
error: more than one device and emulator 问题解决
查看>>
springmvc集成Freemarke配置的几点
查看>>
Django 学习
查看>>
Linux-socket的close和shutdown区别及应用场景
查看>>
xpath
查看>>
parted分区
查看>>
图片标签img
查看>>
表哥的Access入门++以Excel视角快速学习数据库知识pdf
查看>>
TC 配置插件
查看>>
关于异步reset
查看>>
索引优先队列的工作原理与简易实现
查看>>
并发编程简介
查看>>
wow 各职业体验(pvp)
查看>>
字符串的操作
查看>>
性能优化之Java(Android)代码优化
查看>>
盒子游戏
查看>>
处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误模块“Manag
查看>>
01: socket模块
查看>>
mysql触发器
查看>>