SpringMVC框架编写验证码

本文最后更新于:2023年11月9日 晚上

SpringMVC框架编写验证码

验证码的作用:可以防止:恶意破解密码、刷票、论坛灌水,有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试,实际上用验证码是现在很多网站通行的方式,我们利用比较简易的方式实现了这个功能。这个问题可以由计算机生成并评判。
验证码可以使用纯数字、纯文字(例如很多4字成语的验证码)、纯英文字母(本章案例使用0-9,a-z的数字+字母验证码)

1.首先再Controller中写接受验证码请求的方法

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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
/*验证码*/
@RequestMapping(path = "/validation")
public void validation(HttpServletRequest request, HttpServletResponse response) throws IOException {

// 设置浏览器无缓存
response.setHeader("pragam", "No-cache");
response.setHeader("Cache", "No-cache");
response.setDateHeader("Expires", 0);

// 设置响应格式为图片(以前的html/text是文本)
response.setContentType("image/gif");

// 设置宽高
int width = 100;
int height = 50;

// 创建缓冲区(画板)
// BufferedImage.TYPE_INT_RGB使用图片颜色的方案
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

// (画笔)
Graphics g = image.getGraphics();

// 字体(字体,加粗,大小)
Font font = new Font("楷体", Font.BOLD, 30);

g.setFont(font);
//设置验证码边框
g.setColor(Color.orange);
g.drawRect(5, 10, width, height);
//设置验证码内部背景颜色
g.setColor(new Color(255, 247, 238));
g.fillRect(1, 1, width - 2, height - 2);

// 验证码的内容(0-9,a-z)
String content = "0123456789abcdefghijklmnopqrstuvwxyz";
String info = "";

// 四位验证码循环四次
for (int x = 0; x < 4; x++) {
// 随机取字符串
int index = new Random().nextInt(content.length() - 1);
char ch = content.charAt(index);
// 随机数类
Random random = new Random();
// 每个字符随机颜色(颜色可以固定,也可以使用Random类随机,Color的三个参数位RGB颜色值)这里演示为固定
g.setColor(new Color(255, 113, 0));
// 字符位置(随机)
g.drawString(ch + "", 25 * x + 1, 20 + random.nextInt(30));
// 干扰线位置(随机)
g.drawLine(random.nextInt(100), random.nextInt(50), random.nextInt(100), random.nextInt(50));
// 生成的验证码赋值给info
info += ch;
}

// 将随机生成的验证码存入Session(使用时获取Session的值,进行判断输入的是否与随机生成的相同)
HttpSession session = request.getSession();
session.setAttribute("validation", info);

// 通过流的方式进行响应
g.dispose();
OutputStream out = response.getOutputStream();
ImageIO.write(image, "gif", out);

// 释放资源
out.flush();
out.close();
}

2.编写前台页面代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>

<%--style="cursor:pointer;"作用:鼠标移入时会将鼠标改小手形状。title="看不清?点击换一换"作用:鼠标悬停显示文字--%>
验证码:<img src="validation" id="img" title="看不清?点击换一换" onclick="reload()" style="cursor:pointer;"/>

</body>
<script type="text/javascript">
// 每次点击刷新都不是相同请求
function reload(){
document.getElementById("img").src = document.getElementById("img").src+"?a="+new Date().getTime();
}
</script>
</html>

3.打开浏览器访问就可以啦

点击就切换验证码

痛苦犹如一艘船,欲望是指南针。

SpringMVC框架编写验证码
http://example.com/2020/04/07/SpringMVC框架编写后端验证码/
作者
阿波~
发布于
2020年4月7日
更新于
2023年11月9日
许可协议