登录验证码

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. RevDebug -- VS 调试神器,你值得拥有!

    1. What's RevDebug Don't debug - replay! Trace the root cause of bugs in a matter of seconds, save y ...

  2. Select下拉框使用ajax异步绑定数据

    <!--前端样式--> <style> #searchs { width: 200px; position: absolute; border-top: none; margi ...

  3. 如何将多个数据的- 转为:来匹配josn格式

    var str = `北京 2 河北 3 河北-邯郸 301 河北-保定 302 河北-邢台 303 山东 4 山东-青岛 401 山东-烟台 402`; var arrStr = str.split ...

  4. 非对称加密技术里面,最近出现了一种奇葩的密钥生成技术,iFace人脸密钥技术

    要说到非对称加密技术啊,得先说说对称加密技术 什么是对称加密技术 对称加密采用了对称密码编码技术,它的特点是文件加密和解密使用相同的密钥加密. 也就是密钥也可以用作解密密钥,这种方法在密码学中叫做对称 ...

  5. 【异常】Servlet.service() for servlet [springMvc] in context with path [/orderdishessystem] threw exception [Handler processing failed; nested exception is java.lang.NoClassDefFoundError: net/sf/ezmorph/M

    今天做登录的时候,引入json-lib-2.1-jdk15.jar的包时,执行到JSONObject jsonObject = new JSONObject()对象就报标题的那个错. 原来是除了要导入 ...

  6. LeetCode算法题-Image Smoother(Java实现)

    这是悦乐书的第282次更新,第299篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第150题(顺位题号是661).给定表示图像灰度的2D整数矩阵M,您需要设计一个平滑器以 ...

  7. linux配置jdk环境变量

    首先在Linux解压后缀为.tar.gz的jdk压缩文件 解压到当前的文件夹 tar -zcvf /root/java/jdk版本编号 指令: cd 目录路径     -> 是进入该目录路径 c ...

  8. css3的动画特效--元素旋转(transition,animation)

    开发中,视觉要你实现一个元素的旋转问题,比如说如下图所示: 思路:首先动画动效肯定离不开anmimation动画. 和transition动画一样,animation动画也是CSS3动画的一种,这类动 ...

  9. nginx替换响应内容

    因为想要将非业务域名内嵌到微信小程序中,所以用到了nginx的反向代理功能来替换域名实现盗站(缘起:http://www.cnblogs.com/kenwar/p/8288882.html),但是替换 ...

  10. 使用ML.NET + Azure DevOps + Azure Container Instances打造机器学习生产化

    介绍 Azure DevOps,以前称为Visual Studio Team Services(VSTS),可帮助个人和组织更快地规划,协作和发布产品.其中一项值得注意的服务是Azure Pipeli ...