1.首先编写一个用于获取图片的工具类
public class ValidateImage {
private static final int WIDTH = 60;
private static final int HEIGHT = 20;
private static Random random = new Random();
public static Map<String, Object> getImage() {
//用来储存结果返回的
Map<String, Object> map = new HashMap<>();
//创建一个空白的缓存图片
BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
//获取画笔
Graphics graphics = image.getGraphics();
//设置画笔颜色,字体大小,填充画布颜色等
graphics.setColor(Color.GREEN);
graphics.fillRect(0, 0, WIDTH, HEIGHT);
graphics.setColor(Color.RED);
graphics.setFont(new Font("微软雅黑", Font.PLAIN, 15));
//获取随机验证码,同时写到图片上
String code = getCode(graphics, 4);
//把结果保存起来返回出去
map.put("code", code);
map.put("image", image);
//返回结果
return map;
}
private static String getCode(Graphics graphics, int length) {
char [] codes = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890".toCharArray();
String result = "";
for(int i = 0; i < length; i++) {
char temp = codes[random.nextInt(codes.length)];
graphics.drawString(temp + "", i * 15, 15);
result = result + temp;
}
return result;
}
}
2.编写获取验证码的 controller 类方法
@RequestMapping("/getImage")
public void getImage(HttpSession session, HttpServletResponse response) {
OutputStream os =null;
try {
Map<String, Object> map = ValidateImage.getImage();
//把随机验证码存起来,用于你后面的比较
Object code = map.get("code");
System.out.println(code);
session.setAttribute("code", code);
//设置返回的格式并把图片返回
BufferedImage image = (BufferedImage) map.get("image");
response.setContentType("image/png");
os = response.getOutputStream();
ImageIO.write(image, "png", os);
} catch(Exception e) {
e.printStackTrace();
} finally {
//记得关闭流,形成一个好习惯
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
虽然是基于springmvc的,但是处理方法其实还是调用了jdk的API
访问结果如下图所示
顺便提一下编写的时候遇到的一个maven 问题 install或发布项目如果出现以下的问题
这是因为eclipse与maven项目jdk不匹配的问题,解决方法是
右键项目找到 Maven --> UPdate project 点击OK 后,再右键 properties --》 projec facts
然后再运行就成功了
但是每次mvn clean之后再 install 又会出现这个问题,暂时没找解决方案,尽量不要clean项目