自己动手写一个滑动验证码组件(后端为Spring Boot项目)
以下是一个简单的滑动验证码后端接口的Spring Boot示例代码:
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.OutputStream;
import java.io.IOException;
import java.util.Random;
@RestController
public class CaptchaController {
@GetMapping(path = "/captcha", produces = MediaType.IMAGE_PNG_VALUE)
public StreamingResponseBody getCaptcha() {
return outputStream -> {
// 创建图片
BufferedImage image = new BufferedImage(200, 50, BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = image.createGraphics();
// 设置背景颜色
g2d.setColor(Color.WHITE);
g2d.fillRect(0, 0, 200, 50);
// 设置字体和颜色
Font font = new Font("Arial", Font.BOLD, 40);
g2d.setFont(font);
g2d.setColor(Color.BLUE);
// 绘制随机字符
String randomStr = generateRandomString(4);
g2d.drawString(randomStr, 20, 40);
// 绘制干扰线
drawDisturbLine(g2d, image);
// 输出图片
try {
ImageIO.write(image, "png", outputStream);
} catch (IOException e) {
e.printStackTrace();
}
// 释放资源
g2d.dispose();
image.flush();
};
}
private String generateRandomString(int length) {
Random random = new Random();
StringBuilder sb = new StringBuilder(length);
for (int i = 0; i < length; i++) {
sb.append((char) (random.nextInt(26) + 'A'));
}
return sb.toString();
}
private void drawDisturbLine(Graphics2D g2d, BufferedImage image) {
Random random = new Random();
for (int i = 0; i < 5; i++) {
int x1 = random.nextInt(image.getWidth());
int y1 = random.nextInt(image.getHeight());
评论已关闭