springboot实现登录页面的图片验证码
时间: 2023-11-16 22:45:35 浏览: 201
在 Spring Boot 中实现图片验证码可以通过以下步骤:
1. 添加依赖
在 `pom.xml` 文件中添加以下依赖:
```xml
<dependency>
<groupId>com.github.penggle</groupId>
<artifactId>kaptcha</artifactId>
<version>2.3.2</version>
</dependency>
```
2. 添加验证码配置
在 `application.properties` 文件中添加验证码的相关配置:
```properties
# 验证码配置
kaptcha.border=yes
kaptcha.border.color=105,179,90
kaptcha.textproducer.font.color=blue
kaptcha.image.width=125
kaptcha.image.height=45
kaptcha.textproducer.font.size=30
kaptcha.session.key=code
kaptcha.textproducer.char.length=4
kaptcha.textproducer.char.space=5
kaptcha.noise.color=black
```
3. 创建验证码 Controller
创建一个 `CaptchaController` 类,并添加一个 `getCaptcha` 方法,用于获取验证码图片:
```java
@Controller
public class CaptchaController {
@Autowired
private Producer captchaProducer;
@GetMapping("/captcha")
public void getCaptcha(HttpServletRequest request, HttpServletResponse response) throws Exception {
response.setHeader("Cache-Control", "no-store");
response.setHeader("Pragma", "no-cache");
response.setDateHeader("Expires", 0);
response.setContentType("image/jpeg");
String captchaText = captchaProducer.createText();
request.getSession().setAttribute(Constants.KAPTCHA_SESSION_KEY, captchaText);
BufferedImage captchaImage = captchaProducer.createImage(captchaText);
ServletOutputStream outputStream = response.getOutputStream();
ImageIO.write(captchaImage, "jpg", outputStream);
outputStream.close();
}
}
```
4. 在登录页面中使用验证码
在登录页面中添加一个验证码图片和一个输入框:
```html
<img src="/captcha" onclick="this.src='/captcha?'+Math.random();" alt="验证码" />
<input type="text" name="captcha" placeholder="请输入验证码" required>
```
5. 验证用户输入
在登录逻辑中,获取用户输入的验证码并与 session 中的验证码进行比较:
```java
String captcha = request.getParameter("captcha");
String sessionCaptcha = (String) request.getSession().getAttribute(Constants.KAPTCHA_SESSION_KEY);
if (!captcha.equalsIgnoreCase(sessionCaptcha)) {
// 验证码错误
}
```
这样,就可以在 Spring Boot 中实现图片验证码了。
阅读全文