用idea的servlet实现验证码功能
时间: 2023-09-04 22:15:11 浏览: 232
实现验证码功能需要以下步骤:
1. 在登录页面上添加验证码输入框和验证码图片。
2. 在后端生成随机的验证码字符串,并将其存储到 Session 中。
3. 将生成的验证码字符串绘制成图片,并将其输出到前端页面。
4. 用户输入验证码后,将验证码字符串与 Session 中存储的验证码字符串进行比较,以确定用户输入是否正确。
下面是一个使用 IDEA 和 Servlet 实现验证码功能的示例代码:
1. 在登录页面上添加验证码输入框和验证码图片。
```html
<form action="login" method="post">
<label for="username">用户名:</label><input type="text" id="username" name="username"><br>
<label for="password">密 码:</label><input type="password" id="password" name="password"><br>
<label for="verifyCode">验证码:</label><input type="text" id="verifyCode" name="verifyCode" style="width: 100px;"><img src="verifyCode" alt="验证码"><br>
<input type="submit" value="登录">
</form>
```
2. 在后端生成随机的验证码字符串,并将其存储到 Session 中。
```java
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 设置响应头,禁止缓存
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Pragma", "no-cache");
response.setDateHeader("Expires", -1);
// 创建 BufferedImage 对象,用于绘制验证码图片
int width = 100;
int height = 40;
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
// 获取 Graphics2D 对象,用于绘制验证码
Graphics2D g2d = image.createGraphics();
// 设置背景颜色
g2d.setColor(Color.WHITE);
g2d.fillRect(0, 0, width, height);
// 生成随机的验证码字符串
String code = generateRandomCode();
request.getSession().setAttribute("verifyCode", code);
// 绘制验证码字符串
g2d.setColor(Color.BLACK);
g2d.setFont(new Font("宋体", Font.BOLD, 20));
g2d.drawString(code, 30, 25);
// 绘制干扰线
g2d.setColor(Color.GRAY);
for (int i = 0; i < 10; i++) {
int x1 = (int) (Math.random() * width);
int y1 = (int) (Math.random() * height);
int x2 = (int) (Math.random() * width);
int y2 = (int) (Math.random() * height);
g2d.drawLine(x1, y1, x2, y2);
}
// 将验证码图片输出到前端页面
response.setContentType("image/jpeg");
OutputStream out = response.getOutputStream();
ImageIO.write(image, "jpeg", out);
out.close();
}
/**
* 生成随机的验证码字符串
*/
private String generateRandomCode() {
String code = "";
Random random = new Random();
for (int i = 0; i < 4; i++) {
int num = random.nextInt(10);
code += num;
}
return code;
}
```
3. 将生成的验证码字符串绘制成图片,并将其输出到前端页面。
4. 用户输入验证码后,将验证码字符串与 Session 中存储的验证码字符串进行比较,以确定用户输入是否正确。
```java
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 获取用户输入的用户名、密码和验证码
String username = request.getParameter("username");
String password = request.getParameter("password");
String verifyCode = request.getParameter("verifyCode");
// 从 Session 中获取存储的验证码字符串
String storedCode = (String) request.getSession().getAttribute("verifyCode");
// 比较用户输入的验证码和存储的验证码是否一致
if (!verifyCode.equals(storedCode)) {
// 验证码错误,返回错误信息
response.getWriter().write("验证码错误");
return;
}
// 验证码正确,进行用户名和密码的验证
if ("admin".equals(username) && "123456".equals(password)) {
// 登录成功,重定向到首页
response.sendRedirect(request.getContextPath() + "/index.jsp");
} else {
// 登录失败,返回错误信息
response.getWriter().write("用户名或密码错误");
}
}
```
以上就是使用 IDEA 和 Servlet 实现验证码功能的完整示例代码。
阅读全文