数字签名遇到的编码问题

       今天调试代码时遇到一个比较奇怪的问题,用junit跑测试用例时能够成功,但是一把代码放到tomcat上测试就通不过。测试的接口要求对数据进行签名,两种测试方式需要的密码、用户和证书容器信息都是从相同的文件里读取,但是为什么结果却不一样呢?而当时服务器不太稳定,时不时连不上,就以为是服务器的问题。等服务器稳定后又调了半天后,发现还是同样的问题,代码Debug发现两种方式发送的数字签名信息不一样,那应该不是服务器的问题,应该是数字签名的问题。但这数据签名的方法服务器端只提供了jar包,没有提供源码,只能反编译看,也没发现有什么问题,不过发现代码里有把字符窜转成字节数组,而我请求的数据里有中文,会不会是因为两种测试方式的环境编码不一样,转化字节数组不一样,导致了签名结果不一样呢?于是立即验证,在两种环境的代码中都加了下面的代码再测试,编码果然不一样,junit测试环境下是UTF-8,tomcat环境下是GBK。

      log.info(System.getProperty("file.encoding"));
      于是修改tomcat环境下file.encoding(关于file.encoding)值。

  • 如果使用MyEclipse开发,在tomcat的catalina.bat文件中set JAVA_OPTS=%JAVA_OPTS% %LOGGING_CONFIG%的后面加上 -Dfile.encoding="UTF-8"。
  • 如果使用Eclipse,选择server,双击"Tomcat v6.0 Server at localhost",General Information-->Open launch configuration-->Arguments-->VM arguments里参数最后面添加-Dfile.encoding="UTF-8"。

      搞定!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值