Servlet 验证码

本文最后更新于:2024年3月18日 凌晨

Servlet 验证码

pom.xml

1
2
3
4
5
6
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>

代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
@WebServlet(urlPatterns = {"/Example/Servlet.Captcha/ImageServlet"})
public class Captcha extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 让浏览器3秒自动刷新一次。
resp.setHeader("refresh", "3");
// 在内存中创建一个图片。
BufferedImage bufferedImage = new BufferedImage(80, 20, BufferedImage.TYPE_INT_RGB);
// 得到图片。
Graphics2D graphics = (Graphics2D) bufferedImage.getGraphics();// 笔。
// 设置图片的背景颜色。
graphics.setColor(Color.WHITE);
graphics.fillRect(0, 0, 80, 20);
// 给图片写数据。
graphics.setColor(Color.BLUE);
graphics.setFont(new Font(null,Font.BOLD,20));
graphics.drawString(makeRandomNumber(),0,20);
// 告诉浏览器,这个请求用图片的方式打开。
resp.setContentType("image/jpeg");
// 不让浏览器缓存。
resp.setDateHeader("expires",-1);
resp.setHeader("Cache-Control","no-cache");
resp.setHeader("Pragma","no-cache");

// 把图片写给浏览器。
ImageIO.write(bufferedImage,"jpg",resp.getOutputStream());
}

// 生成随机数。
private String makeRandomNumber() {
Random random = new Random();
String num = random.nextInt(99999999) + "";
StringBuffer stringBuffer = new StringBuffer();
for (int i = 0; i < 7 - num.length(); i++) {
stringBuffer.append("0");
}
num = stringBuffer.toString() + num;
return num;
}

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!