用jfinal-weixin 配合 hutool-all-4.5.16 生成验证码的一个异常情况

酷酷的就 发布于 08/16 13:39
阅读 142
收藏 0
public class TestWxaApiController extends WxaController {
	
	public void vcode ( ) {

		String type = getPara ( "type" , "get" ) ; // 请求类型
		String sessionId = getHeader ( "wxa-sessionid" ) ;
		if ( "get".equals ( type ) ) { // 获取验证码 `130*53`
			LineCaptcha lineCaptcha = new LineCaptcha ( 260 , 106 , 4 , 0 ) ;
			String img = lineCaptcha.getImageBase64 ( ) ;
			String code = lineCaptcha.getCode ( ) ;
			Redis.use ( ).setex ( get_vcode_cache_key_name ( sessionId , "vcode" ) , 300 , code ) ;
			HashMap < String , String > maps = MapUtil.of ( "type" , type ) ;

			maps.put ( "captcha" , "data:image/png;base64," + img ) ; // 验证码图片
			renderText ( JSON.toJSONString ( maps ) ) ;
			System.out.println ( "[vcode],code=" + code ) ;
			System.out.println ( "[vcode]"+ JSON.toJSONString ( maps ) ) ;
			return ;
		}
		
	}
	}

代码比较简单, 就是生成一个图形验证码,  在微信小程序上展示出来

在本机测试 win10环境, jdk8 启动服务, 验证码图形展示正常, 启动代码 如下:

public class MidServer {
	public static void main(String[] args) {
//		com.yh.wxa.WeixinConfig
		JFinal.start("src/main/webapp", 8080, "/", 5);
	}
}

测试完成部署在腾讯云服务上, 验证就看不请了, 环境是CentOS Linux release 7.2, tomcat9+jdk9 ,进程信息:

/usr/local/jdk-9.0.4/bin/java -Djava.util.logging.config.file=/home/wxapp/cckx/tomcat80-api-1/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Dfile.encoding=UTF-8 -Djava.security.egd=file:/dev/./urandom -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath :/home/wxapp/cckx/api/WEB-INF/config:/home/wxapp/cckx/tomcat80-api-1/bin/bootstrap.jar:/home/wxapp/cckx/tomcat80-api-1/bin/tomcat-juli.jar -Dcatalina.base=/home/wxapp/cckx/tomcat80-api-1 -Dcatalina.home=/home/wxapp/cckx/tomcat80-api-1 -Djava.io.tmpdir=/home/wxapp/cckx/tomcat80-api-1/temp org.apache.catalina.startup.Bootstrap start

code是1uno的验证码效果, 完全看不出来: 

本机正常的验证码效果是好的:

 大家可以调用 https://wxapp-test.ml:7777/wx/api/v1/vcode_test 获取json, 把captcha属性赋值给<img src="{{captcha}}"/>看下效果,

软件版本:  

  <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>4.5.16</version>
        </dependency>

        <dependency>
            <groupId>com.jfinal</groupId>
            <artifactId>jfinal</artifactId>
            <version>4.3</version>
            <scope>provided</scope>
        </dependency>

帮忙分析下, 我这里哪里有问题? 

加载中
0
QuincyZ
QuincyZ

这种一般都是服务器上缺少相对应的字体,看代码使用的字体是

this.font = new Font("Courier", Font.PLAIN, (int)(this.height * 0.75));

检查一下服务器是否存在这种类型的字体

0
酷酷的就
酷酷的就

确实是字体问题, 已经参照 https://blog.csdn.net/chen_jl168/article/details/79288584 安装了字体, 

实际还是修改了代码, 把字体名称配成参数了. 

感谢各位的帮助  @QuincyZ  @设置腾讯云vps字体可以解决验证码异常 @xiaoshiyue

返回顶部
顶部