Java--验证码登录
步骤:1、封装VerificationCode类;2、实例化;3、调用getText()方法获取验证码并保存到session;4、调用getImage()方法获得Image对象并输出到浏览器。
Verification类
package com.qfedu.demo.utils;import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Random;public class VerificationCode {private int width = 100;// 生成验证码图片的宽度private int height = 30;// 生成验证码图片的高度//生成的验证码的字体,每次生成的时候从四个字体中随机选择一个private String[] fontNames = { "宋体", "楷体", "隶书", "微软雅黑" };private Color bgColor = new Color(255, 255, 255);// 定义验证码图片的背景颜色为白色private Random random = new Random();//验证码的原文字private String codes = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";private String text;// 记录随机字符串/*** 获取一个随意颜色** @return*/private Color randomColor() {int red = random.nextInt(150);int green = random.nextInt(150);int blue = random.nextInt(150);return new Color(red, green, blue);}/*** 获取一个随机字体** @return*/private Font randomFont() {//获取一个随机的字体String name = fontNames[random.nextInt(fontNames.length)];int style = random.nextInt(4);int size = random.nextInt(5) + 24;return new Font(name, style, size);}/*** 获取一个随机字符** @return*/private char randomChar() {return codes.charAt(random.nextInt(codes.length()));}/*** 创建一个空白的BufferedImage对象** @return*/private BufferedImage createImage() {//创建图片对象BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);//获取一个画笔Graphics2D g2 = (Graphics2D) image.getGraphics();//设置画笔的颜色g2.setColor(bgColor);// 设置验证码图片的背景颜色//填充图片的背景g2.fillRect(0, 0, width, height);return image;}/*** 绘制图片的方法* @return*/public BufferedImage getImage() {//创建一个图片对象BufferedImage image = createImage();//继续获取画笔Graphics2D g2 = (Graphics2D) image.getGraphics();//保存随机生成的字符串StringBuffer sb = new StringBuffer();for (int i = 0; i < 4; i++) {String s = randomChar() + "";sb.append(s);g2.setColor(randomColor());g2.setFont(randomFont());float x = i * width * 1.0f / 4;g2.drawString(s, x, height - 8);}this.text = sb.toString();drawLine(image);return image;}/*** 绘制干扰线** @param image*/private void drawLine(BufferedImage image) {Graphics2D g2 = (Graphics2D) image.getGraphics();int num = 5;for (int i = 0; i < num; i++) {int x1 = random.nextInt(width);int y1 = random.nextInt(height);int x2 = random.nextInt(width);int y2 = random.nextInt(height);g2.setColor(randomColor());g2.setStroke(new BasicStroke(1.5f));g2.drawLine(x1, y1, x2, y2);}}public String getText() {return text;}public static void output(BufferedImage image, OutputStream out) throws IOException {ImageIO.write(image, "JPEG", out);}
}
servlet登录接口
package com.qfedu.demo.servlet;import com.fasterxml.jackson.databind.ObjectMapper;
import com.qfedu.demo.model.RespBean;
import com.qfedu.demo.service.UserService;
import com.qfedu.demo.utils.CommonsUtils;
import com.qfedu.demo.utils.VerificationCode;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.PrintWriter;@WebServlet(name = "LoginServlet",urlPatterns = "/login")
public class LoginServlet extends HttpServlet {UserService userService=new UserService();protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String action = request.getParameter("action");if ("vcode".equals(action)){//获取验证码VerificationCode verificationCode=new VerificationCode();BufferedImage image = verificationCode.getImage();String text = verificationCode.getText();System.out.println("vcode = " + text);//保存到session,方便以后使用HttpSession session = request.getSession();session.setAttribute("vcode",text);//输出到浏览器VerificationCode.output(image,response.getOutputStream());}else {request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request,response);}}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String username = request.getParameter("username");String password = request.getParameter("password");Integer result = userService.login(username, password,request);RespBean respBean = null;if (result == CommonsUtils.VCODE_ERROR){respBean = RespBean.error("验证码错误,登录失败");} else if (result == CommonsUtils.ACCOUNT_DISABLED) {respBean=RespBean.error("账户被禁用,登录失败");}else if (result == CommonsUtils.USERNAME_NOT_OR_PASSWORD_ERROR) {respBean = RespBean.error("用户名或者密码输入错误,登录失败");} else if (result == CommonsUtils.LOGIN_SUCCESS) {respBean = RespBean.ok("登录成功");} else {respBean = RespBean.error("登录失败");}response.setContentType("application/json;charset=utf-8");PrintWriter out = response.getWriter();ObjectMapper om = new ObjectMapper();out.write(om.writeValueAsString(respBean));}
}
Java--验证码登录相关推荐
- springBoot redis开发的Java快递代拿系统(含人脸识别,验证码登录)
源码获取:我的博客资源页面可以下载!!!! 项目名称 springBoot redis开发的Java快递代拿系统(含人脸识别,验证码登录) 系统介绍 快递代拿系统 > 该项目使用当前最为流行的 ...
- Java实现手机验证码登录和SpringSecurity权限控制
手机验证码登录和SpringSecurity权限控制 手机快速登录功能,就是通过短信验证码的方式进行登录.这种方式相对于用户名密码登录方式,用户不需要记忆自己的密码,只需要通过输入手机号并获取验证码就 ...
- java antd实现登录,基于 antd pro 的短信验证码登录
概要 整体流程 前端 页面代码 请求验证码和登录的 service (src/services/login.js) 处理登录的 model (src/models/login.js) 后端 短信验证码 ...
- java短信验证码登录功能设计与实现
前言 现在不管是各类的网站,还是大小社交app,登录方式是越来越多了,其中基于短信验证码的登录可以说是各类app必不可少的方式,短信验证码登录以其高效,安全,便捷等特性受到许多用户的青睐 业务案例 如 ...
- 你的 Java 验证码和登录程序中可能也存在这样的漏洞
进行这个整理,是因为在XXX项目的时候,发现登录模块的忘记密码功能,在验证用户身份的时候是通过手机验证码验证的.通过修改响应包的返回参数值,可以绕过验证,进入第三步的密码重置.还有最近测试的一个sso ...
- Java验证码及登录中的漏洞分析
阅读文本大概需要3分钟. 作者:小白007 来源:https://www.cnblogs.com/ping007 进行这个整理,是因为在XXX项目的时候,发现登录模块的忘记密码功能,在验证用户身份的时 ...
- Java登录专题-----手机验证码登录 发送验证码
1.打印日志 ,检验入参 入参为 mobile 手机号 action动作 分为注册,与登录 2. UserInfoModel userInfoModel = new UserInfoModel() ...
- 各种登录源码来了!基础登录、验证码登录、小程序登录...全都要!
现在开发个应用登录比以前麻烦的多.产品经理说用户名密码登录.短信登录都得弄上,如果搞个小程序连小程序登录也得安排上,差不多就是我全都要. 多种登录途径达到一个效果确实不太容易,今天胖哥在Spring ...
- Spring Security 实战干货:从零手写一个验证码登录
1. 前言 前面关于Spring Security胖哥又写了两篇文章,分别图文并茂地介绍了UsernamePasswordAuthenticationFilter和 AuthenticationMan ...
- Spring Security构建Rest服务-0702-短信验证码登录
先来看下 Spring Security密码登录大概流程,模拟这个流程,开发短信登录流程 1,密码登录请求发送给过滤器 UsernamePasswordAuthenticationFilter 2,过 ...
最新文章
- 刘光瑞php,PHP Markdown 解析器 HyperDown
- 039_Dialog对话框
- ML:分类预测问题中评价指标(ER/混淆矩阵P-R-F1/ROC-AUC/RP/mAP)简介、使用方法、代码实现、案例应用之详细攻略
- android 8.0手机无法更新版本,安卓手机升级安卓8.0后 系统以后可能都无法回退
- c++中的explicit关键字
- 七十五、栈+双指针,头条当年接雨水问题
- c++编写托管dll_教程:如何编写简单的网站并免费托管
- mysql输出重定向_将MySQL输出内容写入(重定向到)文件
- IOS开发-UIView之动画效果的实现方法(合集)
- Js屏蔽键盘输入的某些字符,用以部分代替正则表达式
- windows xp下Apache2.2.11整合Tomcat6.0.20(集群模式无集群模式)
- Android应用程序组件Content Provider的启动过程源代码分析(5)
- 基于MATLAB的身份证号码识别系统
- omap gpio irq
- 系统分析与设计——系统顺序图
- ntp linux 是什么意思,【NTP】Linux NTP
- 数学分析:集合的基本运算
- [项目管理] 项目管理之需求管理
- Yoga14s 2021锐龙集显版蓝牙失效问题的解决方法
- MOS管开关时的米勒效应