填坑日记(二)

前言

  • 对接第三方系统,接口请求需要带上签名标识和返回数据需要验签。
  • 整个系统使用编码格式为UTF-8

问题描述

IDEA进行对接调试,使用国密加解密生成签名标识和验签没问题,但是打成jar包后进行部署后,一直验签错误。

问题排查

进行部署环境DEBUG跟踪代码发现部署环境的String.getBytes()和本地直接IDEA启动String.getBytes()两个字节长度不一致,因此导致部署环境验签等问题

查看String.getBytes()相关encode代码,代码如下:

 public static Charset defaultCharset() {
        if (defaultCharset == null) {
            synchronized (Charset.class) {
                String csn = AccessController.doPrivileged(
                    new GetPropertyAction("file.encoding"));
                Charset cs = lookup(csn);
                if (cs != null)
                    defaultCharset = cs;
                else
                    defaultCharset = forName("UTF-8");
            }
        }
        return defaultCharset;
    }

 

static byte[] encode(char[] ca, int off, int len) {
        String csn = Charset.defaultCharset().name();
        try {
            // use charset name encode() variant which provides caching.
            return encode(csn, ca, off, len);
        } catch (UnsupportedEncodingException x) {
            warnUnsupportedCharset(csn);
        }
        try {
            return encode("ISO-8859-1", ca, off, len);
        } catch (UnsupportedEncodingException x) {
            // If this code is hit during VM initialization, MessageUtils is
            // the only way we will be able to get any kind of error message.
            MessageUtils.err("ISO-8859-1 charset not available: "
                             + x.toString());
            // If we can not find ISO-8859-1 (a required encoding) then things
            // are seriously wrong with the installation.
            System.exit(1);
            return null;
        }
    }

上面代码说明,默认的编码格式会取file.encoding值。查看启动脚本内容,部分内容如下:

java -Xmx256M -Xms256M -jar -Dfile.encoding=gbk xxx.jar

指定了 -Dfile.encoding=gbk 因此String.getBytes()不是使用UTF-8编码导致验签等问题。

解决方法

将 -Dfile.encoding=gbk 改为 -Dfile.encoding=UTF-8即可。

其他

将-Dfile.encoding改为UTF-8可能导致windows的cmd控制台输出乱码,猜想之前写这个脚本的人应该是要了控制台不乱码才指定编码格式。

如果想解决控制台显示乱码问题,可以如下操作即可

  • 更换CMD的 活动代码页编号, 即更改字符集,命令:chcp 65001 
  • 修改字体,步骤打开CMD窗口,修改它的配置:属性 ->字体 ->选择 Lucida Console
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值