美文网首页
画一个验证码加 验证

画一个验证码加 验证

作者: 不做掉发侠 | 来源:发表于2019-08-13 01:43 被阅读0次

首先是 login.html     表单如下

   <form action="/demo2/login" method="post">

  <input type="text" name="imagenum"><img alt="" src="/demo2/cap"><br>

  <input type="submit" value="submit">

  </form>


其次是画验证码的ImageServlet.java

import java.awt.Color;

import java.awt.Font;

import java.awt.Graphics;

import java.awt.image.BufferedImage;

import java.io.IOException;

import java.util.Random;

import javax.imageio.ImageIO;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

public class ImageServlet extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

this.doPost(request, response);

}

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// 获取图片

// 创建图片

int width = 80;

int height = 40;

BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

// 创建图层 获得画板

Graphics g = image.getGraphics();

// 确定使用的画笔颜色

g.setColor(Color.BLACK);

// 填充矩形

g.fillRect(0, 0, width - 2, height - 2);

String dataString = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";

// 设置字体

g.setFont(new Font("宋体", Font.BOLD, 30));

// 缓存随机生成的字符

StringBuffer buf = new StringBuffer();

Random random = new Random();

for (int i = 0; i < 4; i++) {

// 设置随机颜色

g.setColor(new Color(random.nextInt(255), random.nextInt(255), random.nextInt(255)));

// 获得一个随机字符

int index = random.nextInt(62);

String str = dataString.substring(index, index + 1);

g.drawString(str, 20 * i, 30);

// 缓存

buf.append(str);

}

// 干扰线

for (int i = 0; i < 5; i++) {

g.setColor(new Color(random.nextInt(255), random.nextInt(255), random.nextInt(255)));

g.drawLine(random.nextInt(width), random.nextInt(height), random.nextInt(width), random.nextInt(height));

}

HttpSession session = request.getSession();

session.setAttribute("cap", buf.toString());

response.setContentType("image/jpeg");

// 将图片发送给浏览器

ImageIO.write(image, "jpg", response.getOutputStream());//图片 格式 输出流

}

}


然后是验证 LoginServlet.java

import java.io.IOException;

import java.io.PrintWriter;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

public class LoginServlet extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

this.doPost(request, response);

}

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

request.setCharacterEncoding("UTF-8");

response.setContentType("text/html;charset=UTF-8");

String imagenum = request.getParameter("imagenum");

PrintWriter writer = response.getWriter();

if (imagenum != null && imagenum != "") {

HttpSession session = request.getSession();

String cap = session.getAttribute("cap").toString();

if (cap.equalsIgnoreCase(imagenum)) {

writer.write("验证通过");

} else {

writer.write("验证失败");

Thread thread = new Thread();

try {

thread.sleep(1000);

response.sendRedirect("/demo2/login.html");

} catch (Exception e) {

}

}

// 无论什么情况 只能使用一次

session.removeAttribute("cap");

} else {

writer.write("请填写参数");

}

}

}

相关文章

网友评论

      本文标题:画一个验证码加 验证

      本文链接:https://www.haomeiwen.com/subject/cuemjctx.html