登录验证码

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());  
}

Java实现登录验证码的更多相关文章

  1. java 实现登录验证码 (kaptcha 验证码组件)

    验证码的作用: 1.防止广告机注册和发帖.评论.2.防止暴力破解密码,特别是有管理员权限的密码. 在这里介绍一种非常实用的验证码生成工具:kaptcha 这个工具,可以生成各种样式的验证码,因为它是可 ...

  2. 【Java】登录验证码

    Html: <input id="verifyCode" name="verifyCode" type="text" value=&q ...

  3. Java中SSM+Shiro系统登录验证码的实现方法

    1.验证码生成类: import java.util.Random; import java.awt.image.BufferedImage; import java.awt.Graphics; im ...

  4. Selenium2学习-018-WebUI自动化实战实例-016-自动化脚本编写过程中的登录验证码问题

    日常的 Web 网站开发的过程中,为提升登录安全或防止用户通过脚本进行黄牛操作(宇宙最贵铁皮天朝魔都的机动车牌照竞拍中),很多网站在登录的时候,添加了验证码验证,而且验证码的实现越来越复杂,对其进行脚 ...

  5. Java模拟登录系统抓取内容【转载】

    没有看考勤的习惯,导致我的一天班白上了,都是钱啊,系统也不发个邮件通知下....     为了避免以后还有类似状况特别写了个java模拟登录抓取考勤内容的方法(部分代码来自网络),希望有人修改后也可以 ...

  6. Spring Boot + Spring Cloud 实现权限管理系统 后端篇(十七):登录验证码实现(Captcha)

    登录验证码 登录验证是一般系统都会有的功能,验证的方式也多种多样,比如输入式验证码,拖动式验证条,拖动式验证拼图等等. 我们这里先实现常规的输入验证码的方式,右边显示验证码图片,点击可刷新,左边输入验 ...

  7. 登录验证码实现(Captcha)

    登录验证码 登录验证是一般系统都会有的功能,验证的方式也多种多样,比如输入式验证码,拖动式验证条,拖动式验证拼图等等. 我们这里先实现常规的输入验证码的方式,右边显示验证码图片,点击可刷新,左边输入验 ...

  8. java的动态验证码单线设计

    1.java的动态验证码我这里将介绍两种方法: 一:根据java本身提供的一种验证码的写法,这种呢只限于大家了解就可以了,因为java自带的模式编写的在实际开发中是没有意义的,所以只供学习一下就可以了 ...

  9. 【转】 我的java web登录RSA加密

    [转] 我的java web登录RSA加密 之前一直没关注过web应用登录密码加密的问题,这两天用appscan扫描应用,最严重的问题就是这个了,提示我明文发送密码.这个的确很不安全,以前也大概想过, ...

随机推荐

  1. 算法与数据结构(十二) 散列(哈希)表的创建与查找(Swift版)

    散列表又称为哈希表(Hash Table), 是为了方便查找而生的数据结构.关于散列的表的解释,我想引用维基百科上的解释,如下所示: 散列表(Hash table,也叫哈希表),是根据键(Key)而直 ...

  2. [.net 面向对象程序设计深入](31)实战设计模式——使用Ioc模式(控制反转或依赖注入)实现松散耦合设计(1)

    [.net 面向对象程序设计深入](31)实战设计模式——使用IoC模式(控制反转或依赖注入)实现松散耦合设计(1) 1,关于IOC模式 先看一些名词含义: IOC: Inversion of con ...

  3. Html5视频播放器-VideoJS+Audio标签实现视频,音频及字幕同步播放

    一,VideoJS介绍 引用脚本,videojs很为你着想,直接cdn了,你都不需要下载这些代码放入自己的网站 <link href=”http://vjs.zencdn.net/c/video ...

  4. [Swift]LeetCode455. 分发饼干 | Assign Cookies

    Assume you are an awesome parent and want to give your children some cookies. But, you should give e ...

  5. [Swift]LeetCode860. 柠檬水找零 | Lemonade Change

    At a lemonade stand, each lemonade costs $5. Customers are standing in a queue to buy from you, and ...

  6. Unable to preventDefault inside passive event listener due to target being treated as passive

    Unable to preventDefault inside passive event listener due to target being treated as passive 今天在做项目 ...

  7. 使用vue-cli搭建vue项目

    1.安装node环境,然后在命令行输入node -v 和npm -v 查看版本号 2.在正式开始项目之前我们先介绍一下vue-cli,vue-cli是一个脚手架工具,vue-cli是帮助我们写好vue ...

  8. Python内置函数(47)——open

    英文文档: open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, ope ...

  9. 【Docker】(6)---Dockerfile文件

    springboot项目打包镜像中的Dockerfile文件 在讲Dockerfile文件之前应该先讲下maven的一个插件叫:dockerfile-maven-plugin.他们是组合一起用的 一. ...

  10. java基础(十二 )-----Java泛型详解

    本文对java的泛型的概念和使用做了详尽的介绍. 概述 泛型在java中有很重要的地位,在面向对象编程及各种设计模式中有非常广泛的应用. 什么是泛型?为什么要使用泛型? 泛型,即“参数化类型”.一提到 ...