Java实现登录验证码
登录验证码
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实现登录验证码的更多相关文章
- java 实现登录验证码 (kaptcha 验证码组件)
验证码的作用: 1.防止广告机注册和发帖.评论.2.防止暴力破解密码,特别是有管理员权限的密码. 在这里介绍一种非常实用的验证码生成工具:kaptcha 这个工具,可以生成各种样式的验证码,因为它是可 ...
- 【Java】登录验证码
Html: <input id="verifyCode" name="verifyCode" type="text" value=&q ...
- Java中SSM+Shiro系统登录验证码的实现方法
1.验证码生成类: import java.util.Random; import java.awt.image.BufferedImage; import java.awt.Graphics; im ...
- Selenium2学习-018-WebUI自动化实战实例-016-自动化脚本编写过程中的登录验证码问题
日常的 Web 网站开发的过程中,为提升登录安全或防止用户通过脚本进行黄牛操作(宇宙最贵铁皮天朝魔都的机动车牌照竞拍中),很多网站在登录的时候,添加了验证码验证,而且验证码的实现越来越复杂,对其进行脚 ...
- Java模拟登录系统抓取内容【转载】
没有看考勤的习惯,导致我的一天班白上了,都是钱啊,系统也不发个邮件通知下.... 为了避免以后还有类似状况特别写了个java模拟登录抓取考勤内容的方法(部分代码来自网络),希望有人修改后也可以 ...
- Spring Boot + Spring Cloud 实现权限管理系统 后端篇(十七):登录验证码实现(Captcha)
登录验证码 登录验证是一般系统都会有的功能,验证的方式也多种多样,比如输入式验证码,拖动式验证条,拖动式验证拼图等等. 我们这里先实现常规的输入验证码的方式,右边显示验证码图片,点击可刷新,左边输入验 ...
- 登录验证码实现(Captcha)
登录验证码 登录验证是一般系统都会有的功能,验证的方式也多种多样,比如输入式验证码,拖动式验证条,拖动式验证拼图等等. 我们这里先实现常规的输入验证码的方式,右边显示验证码图片,点击可刷新,左边输入验 ...
- java的动态验证码单线设计
1.java的动态验证码我这里将介绍两种方法: 一:根据java本身提供的一种验证码的写法,这种呢只限于大家了解就可以了,因为java自带的模式编写的在实际开发中是没有意义的,所以只供学习一下就可以了 ...
- 【转】 我的java web登录RSA加密
[转] 我的java web登录RSA加密 之前一直没关注过web应用登录密码加密的问题,这两天用appscan扫描应用,最严重的问题就是这个了,提示我明文发送密码.这个的确很不安全,以前也大概想过, ...
随机推荐
- 玩转vue前进刷新,后退不刷新and按需刷新
大白萝卜小课堂开讲了!带你玩转vue前进后退按需刷新! 用vue做后台管理项目,特别是有列表页.列表数据详情页.列表数据修改页功能的码友们,几乎都被vue前进后退都刷新的逻辑坑过,本萝卜更是! 萝卜的 ...
- 算法与数据结构(十一) 平衡二叉树(AVL树)(Swift版)
今天的博客是在上一篇博客的基础上进行的延伸.上一篇博客我们主要聊了二叉排序树,详情请戳<二叉排序树的查找.插入与删除>.本篇博客我们就在二叉排序树的基础上来聊聊平衡二叉树,也叫AVL树,A ...
- 关于 Senparc.Weixin.Cache.Redis 引用的 StackExchange.Redis 版本不匹配的反馈测试
推测原因是老系统中有地方引用了旧版本的 StackExchange.Redis,原因是 StackExchange.Redis 1.2.6 版本未提供针对 .net 4.6 以上的支持,导致库引用会失 ...
- JS中的特殊类别注意区分
undefined和null 在JavaScript中存在这样两种原始类型:Null与Undefined. 这两种类型常常会使JavaScript的开发人员产生疑惑,在什么时候是Null,什么时候又是 ...
- [Swift]LeetCode956. 最高的广告牌 | Tallest Billboard
You are installing a billboard and want it to have the largest height. The billboard will have two ...
- [Swift]LeetCode966.元音拼写检查器 | Vowel Spellchecker
Given a wordlist, we want to implement a spellchecker that converts a query word into a correct word ...
- PHP算法之二分查找
二分查找: 数组必须有序,且不重复. 一般实际工作中,很少有这样的数组,所以应用的很少,但是思想很好. 1 // 二分查找 2 $array = [10,14,23,33,45,56,65,77,89 ...
- 执行find / -name *.sh时报错 find: 路径必须在表达式之前: start-ressvr-release.sh
想查找一个包含4000多文件的目录下所有.sh结尾的文件 使用命令 find ./ -name *.sh (本身已经在要查找的目录里了) 结果报错: 解决方法一:find ./ - ...
- api-ms-win-crt-process-l1-1-0.dll 丢失的处理,遇到问题和完美解决
api-ms-win-crt-process-l1-1-0.dll 丢失的处理 简介 在换了新电脑后,一些环境需要重新搭建,本以为是个小case,没想到竟然遇到了各种拦路虎. 在成功安装Python3 ...
- PHP 编码规范
这是给小组制定的php编码规范 该 PHP 编码规范基本上是同 PSR 规范的.有一部分的编码规范 PSR 中是建议,此编码规范会强制要求. 此编码规范 是以 PSR-1 / PSR-2 / PSR- ...