springboot验证码实现
时间: 2023-10-14 08:30:07 浏览: 173
在 Spring Boot 中实现验证码可以使用 Kaptcha 库。
首先,需要在 Maven 或 Gradle 中添加 Kaptcha 依赖:
Maven:
```xml
<dependency>
<groupId>com.github.penggle</groupId>
<artifactId>kaptcha</artifactId>
<version>2.3.2</version>
</dependency>
```
Gradle:
```groovy
implementation 'com.github.penggle:kaptcha:2.3.2'
```
然后,在 Spring Boot 的配置类中添加 Kaptcha 配置:
```java
@Configuration
public class KaptchaConfig {
@Bean
public Producer kaptchaProducer() {
Properties properties = new Properties();
// 配置验证码图片的长和宽
properties.setProperty("kaptcha.image.width", "150");
properties.setProperty("kaptcha.image.height", "50");
// 配置字符集
properties.setProperty("kaptcha.textproducer.char.string", "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890");
// 配置验证码长度
properties.setProperty("kaptcha.textproducer.char.length", "4");
// 创建 Kaptcha 对象,并设置属性
Config config = new Config(properties);
DefaultKaptcha kaptcha = new DefaultKaptcha();
kaptcha.setConfig(config);
return kaptcha;
}
}
```
最后,在控制器中使用 Kaptcha 生成验证码:
```java
@Controller
public class CaptchaController {
@Autowired
private Producer kaptchaProducer;
@GetMapping("/captcha.jpg")
public void captcha(HttpServletRequest request, HttpServletResponse response) throws Exception {
// 设置响应头信息,告诉浏览器返回的是图片
response.setContentType("image/jpeg");
response.setHeader("Pragma", "no-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
// 生成验证码文本和图片
String text = kaptchaProducer.createText();
BufferedImage image = kaptchaProducer.createImage(text);
// 将验证码文本保存到 Session 中
request.getSession().setAttribute("captcha", text);
// 将验证码图片输出到浏览器
ServletOutputStream out = response.getOutputStream();
ImageIO.write(image, "jpg", out);
out.flush();
out.close();
}
}
```
在 HTML 中使用验证码:
```html
<form method="post">
<label for="captcha">验证码:</label>
<input type="text" id="captcha" name="captcha">
<img src="/captcha.jpg" alt="验证码">
<button type="submit">提交</button>
</form>
```
在后端验证验证码:
```java
@PostMapping("/submit")
public String submit(HttpServletRequest request, String captcha) {
String sessionCaptcha = (String) request.getSession().getAttribute("captcha");
if (captcha.equals(sessionCaptcha)) {
// 验证码正确
// 进行其他操作
return "success";
} else {
// 验证码错误
// 返回错误信息
return "failure";
}
}
```
阅读全文