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

原文地址:https://www.cnblogs.com/JaminYe/p/10459453.html

时间: 2024-08-25 00:19:26

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

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

验证码的作用: 1.防止广告机注册和发帖.评论.2.防止暴力破解密码,特别是有管理员权限的密码. 在这里介绍一种非常实用的验证码生成工具:kaptcha 这个工具,可以生成各种样式的验证码,因为它是可配置的. 而 kaptcha工作的原理,是调用 com.google.code.kaptcha.servlet.KaptchaServlet,生成一个图片.同时将生成的验证码字符串放到 HttpSession中,直接从session中获取这张验证码图片,而不会占用实际内存. 使用 kaptcha 可

java登录验证码

一.创建web项目 使用简单servlet来演示java验证码图片生成,servlet简单使用参考http://www.cnblogs.com/ywlaker/p/6038676.html 二.生成验证码 创建VcodeObject.java,存储验证码与图片 package com.demo.vcode; import java.io.InputStream; public class VcodeObject { private String code; private InputStream

SSM+Shiro系统登录验证码的实现

1.验证码生成类: import java.util.Random; import java.awt.image.BufferedImage; import java.awt.Graphics; import java.awt.Font; import java.awt.Color; /** * 验证码生成器类,可生成数字.大写.小写字母及三者混合类型的验证码. 支持自定义验证码字符数量: 支持自定义验证码图片的大小: 支持自定义需排除的特殊字符: * 支持自定义干扰线的数量: 支持自定义验证码

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

日常的 Web 网站开发的过程中,为提升登录安全或防止用户通过脚本进行黄牛操作(宇宙最贵铁皮天朝魔都的机动车牌照竞拍中),很多网站在登录的时候,添加了验证码验证,而且验证码的实现越来越复杂,对其进行脚本识别的难度也越来越高.这对我们自动化脚本编写带了非常的不便,那么如何解决登录时的验证码问题呢?经常有初学自动化脚本编写的小主们问及此问题. 此文主要针对如何解决自动化测试脚本中含登录态的操作问题,即如何降低验证码对自动化脚本编写过程中的解决方法进行分析和解决,并以实例演示(基于易迅网易迅账号登录)

登录验证码实现(Captcha)

登录验证码 登录验证是一般系统都会有的功能,验证的方式也多种多样,比如输入式验证码,拖动式验证条,拖动式验证拼图等等. 我们这里先实现常规的输入验证码的方式,右边显示验证码图片,点击可刷新,左边输入验证码.如下图为实现的效果. 实现案例 验证码的实现需要前后端协同,脱离彼此则不可用,故将前后端的实现放在一起,不再另写前端教程. 后端实现 1.添加依赖 打开 kitty-admin 工程,添加maven依赖. pom.xml <!-- kaptcha --> <dependency>

java linux ImageIO 验证码在一段时间以后出不来 问题总结

最近在测试上布署的项目经常性的出现验证码过了一段时间以后出不来的情况,耐心找了一下,最后在上级的指导下发现了报错,其实说真的,我自己也找到了这个报错,只是没有当一回事.因为这个验证码的东西不是我写的,我也不知道这个报错是不是和它有关系. 错误如下: 2014-05-21 10:46:17,826 DEBUG [org.springframework.web.servlet.DispatcherServlet] - Could not complete request org.springfram

那些琐碎的知识-----登录验证码

1.新建文件CheckCode.aspx 前台不用写,后台代码为: using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControl

javaweb登录验证码的实现

第一种 第一步:  JSP <li><input name="validCode"  id="validCode" type="text" class="loginvalid" value="" onclick="JavaScript:this.value=''"/><img src="${path}/patchca.htm"  id =

C# 登录验证码

基于字符的图片验证码是系统在用户访问页面时随机产生的一个图像,图像中包含数字.字母或其他文字.其中字符序列与背景图像进行信息融合,添加干扰噪声,或对图像进行混杂.扭曲.粘连.变形等处理,以增加图像识别的难度. 图片验证码的生成主要分成两个步骤: 1.生成随机字符串: 2.生成验证码图片. 1 public partial class CheckCodeImageExt : System.Web.UI.Page 2 { 3 protected void Page_Load(object sende