数字签名遇到的编码问题

来源:互联网 发布:软件开发模板 编辑:程序博客网 时间:2024/05/20 05:55

       今天调试代码时遇到一个比较奇怪的问题,用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
原创粉丝点击