Java生成验证码的简单做法

来源:互联网 发布:java notify用法 编辑:程序博客网 时间:2024/04/27 13:49

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项目

原创粉丝点击