Java实现登录验证码

Posted JaminYe

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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验证码怎么做

javaweb中如何实时判定验证码的正误

Java Web 一次性验证码的代码实现

Java使用SSM框架实现登录页面的验证码功能

java swing中登录界面验证码的实现。

Java实现登录验证码