转--记一次服务发布之后,图形验证码乱码的服务排查
? 由于业务拓展,新买了台系统为centOS7的服务器,配置完jdk和nginx之后,将服务发布到服务器上并部署启动,然后刷新页面,神奇的事情就出现了: 第一个想到的问题,就是进行本地调试,发现一切正常;于是在生成验证码文本的地方加上了logger输出,再次发布程序到服务器上,确定是否是文本生成时产生的问题,附上代码: // String vcode = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; String vcode = "0123456789"; codeImg = new BufferedImage(74,30,BufferedImage.TYPE_3BYTE_BGR); Graphics2D g = codeImg.createGraphics(); g.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION,RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY); g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON); g.setColor(Color.white); g.fillRect(0,1)">); for (int i = 0; i < 100; i++) { int x = (int) Math.round((Math.random() * 74)); int y = ()); Color color = new Color((float) (Math.random() * 0.7) + 0.3F,(0.3F); g.setColor(color); g.drawRect(x,y,1,1)">1); } code = ""; 4; i++int fontsize = (int) Math.round(Math.random() * 3 + 20); Font font = new Font("",1)">3),fontsize); Color color = new Color((0.7),1)">0.7)); g.setColor(color); g.setFont(font); Character c = vcode.charAt(Math.round((float) Math.random() * 35)); Character c = vcode.charAt(Math.round((float) Math.random() * 9)); code += c; g.drawString(c + 18 * i + (int) (Math.random() * 10 - 5) + 2,1)">24 + (5)); } logger.info(code:{}运行服务之后,通过日志,发现文本生成输出正常,开始怀疑是否是jdk版本不一致导致的问题。因为我们开发环境装的是jdk7,服务器上装的是jdk8,难道是jdk做向下兼容的时候出现的问题;于是将项目发到另一台也是jdk8的服务器上,启动测试,发现一切正常,排除jdk版本问题。此时,再次查看代码,发现Graphics2D在生成文本的时候,其实调用了Font组件 |