怎么使用idea来实现验证码登陆页面
时间: 2024-03-18 14:40:20 浏览: 139
登陆界面验证码的实现
实现验证码登录页面,需要在之前的示例代码中添加一个验证码输入框和一个生成验证码的逻辑。
下面是一个使用 Java 和 Spring Boot 框架实现验证码登录页面的示例:
1. 在 `pom.xml` 文件中添加以下依赖:
```xml
<dependency>
<groupId>com.github.axet</groupId>
<artifactId>kaptcha</artifactId>
<version>2.3.2</version>
</dependency>
```
2. 创建一个 `LoginController` 类,该类包含以下方法:
```java
@GetMapping("/login")
public String login() {
return "login";
}
@PostMapping("/doLogin")
public String doLogin(@RequestParam String username,
@RequestParam String password,
@RequestParam String verifyCode,
HttpSession session) {
String kaptchaCode = (String) session.getAttribute("kaptchaCode");
if (!verifyCode.equalsIgnoreCase(kaptchaCode)) {
return "redirect:/login?error=验证码错误";
}
// 验证用户名和密码,如果验证通过,则跳转到主页
return "redirect:/index";
}
@GetMapping("/verifyCode")
public void verifyCode(HttpServletResponse response, HttpSession session) throws Exception {
// 生成验证码图片,并将验证码文本存入 session
response.setDateHeader("Expires", 0);
response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
response.addHeader("Cache-Control", "post-check=0, pre-check=0");
response.setHeader("Pragma", "no-cache");
response.setContentType("image/jpeg");
String verifyCode = new Kaptcha().createText();
session.setAttribute("kaptchaCode", verifyCode);
BufferedImage image = new Kaptcha().createImage(verifyCode);
ServletOutputStream out = response.getOutputStream();
ImageIO.write(image, "jpg", out);
out.flush();
out.close();
}
```
3. 创建一个 `login.html` 页面,包含以下代码:
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>验证码登录</title>
<link rel="stylesheet" href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.5.0/css/bootstrap.min.css">
</head>
<body>
<div class="container">
<div class="row justify-content-center">
<div class="col-md-6">
<div class="card">
<div class="card-header">验证码登录</div>
<div class="card-body">
<form action="/doLogin" method="post">
<div class="form-group">
<label for="username">用户名</label>
<input type="text" class="form-control" id="username" name="username" required autofocus>
</div>
<div class="form-group">
<label for="password">密码</label>
<input type="password" class="form-control" id="password" name="password" required>
</div>
<div class="form-group">
<label for="verifyCode">验证码</label>
<div class="input-group">
<input type="text" class="form-control" id="verifyCode" name="verifyCode" required>
<img src="/verifyCode" onclick="this.src='/verifyCode?t='+Math.random()" style="cursor: pointer;">
</div>
</div>
<button type="submit" class="btn btn-primary btn-block">登录</button>
</form>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
```
在这个页面中,我们创建了一个包含用户名、密码和验证码输入框的表单,并使用 Bootstrap 样式美化页面。验证码输入框旁边还有一个图像,点击图像可以刷新验证码。
这样,就实现了一个简单的验证码登录页面。当用户提交表单时,控制器会验证验证码是否正确,如果验证码正确,则继续验证用户名和密码,如果验证通过,则跳转到主页。否则,将出现错误消息并重定向到登录页面。
阅读全文