基于HTTP在互联网传输敏感数据的消息摘要、签名与加密方案(4)
- UID
- 1029342
- 性别
- 男
|
基于HTTP在互联网传输敏感数据的消息摘要、签名与加密方案(4)
/** - * TODO Write your own business here.
- *
- * @param xml
- * @param operation
- * @return
- */
- private String doSomeThing(String xml, String operation) {
- return
"done"; - }
- /**
- * Extract xml string form http request.
- *
- * @param request
- * @return
- * @throws IOException
- */
- private String getXmlStringFromHttpRequest(HttpServletRequest request) {
- String requestXmlString = "";
- try {
- InputStream inputStream = request.getInputStream();
- String encoding = StringUtils.isNotBlank(request
- .getCharacterEncoding()) ? request.getCharacterEncoding()
- : "utf-8";
- requestXmlString = getXmlStringFromInputStream(inputStream,
- encoding);
- encoding = null;
- inputStream.close();
- inputStream = null;
- } catch (IOException e) {
- log.error(e, e);
- }
- return requestXmlString;
- }
- /**
- * Extract xml string from the inputStream.
- *
- * @param inputStream
- * @param charsetName
- * @return
- */
- private String getXmlStringFromInputStream(InputStream inputStream,
- String charsetName) {
- String resultXmlString = "";
- String tempString = null;
- BufferedReader bufferedReader;
- try {
- bufferedReader = new BufferedReader(new InputStreamReader(
- inputStream, charsetName));
- tempString = bufferedReader.readLine();
- while (tempString != null) {
- resultXmlString += tempString;
- tempString = bufferedReader.readLine();
- }
- tempString = null;
- bufferedReader.close();
- bufferedReader = null;
- } catch (UnsupportedEncodingException e) {
- log.error(e, e);
- } catch (IOException e) {
- log.error(e, e);
- }
- return StringUtils.trim(resultXmlString);
- }
- }
5.maven配置:
Xml代码 [url=][/url]
- <dependency>
- <groupId>org.bouncycastle</groupId>
- <artifactId>bcprov-jdk16</artifactId>
- <version>1.46</version>
- </dependency>
- <dependency>
- <groupId>commons-lang</groupId>
- <artifactId>commons-lang</artifactId>
- <version>2.5</version>
- </dependency>
- <dependency>
- <groupId>org.apache.httpcomponents</groupId>
- <artifactId>httpclient</artifactId>
- <version>4.2.5</version>
- </dependency>
- <dependency>
- <groupId>org.apache.httpcomponents</groupId>
- <artifactId>httpmime</artifactId>
- <version>4.2.5</version>
- </dependency>
六、结语
在本方案设计实现过程中,消息传递的框架采
用的是Java开发者所熟悉的Servlet技术,摘要、签名、加密所采用的算法,以及所依赖的第三方jar也是比较有口碑又大众化的货,对于有类似需要的开发者来说,本方案具有一定的参考意义。远程传递消息框架以及生成签名的环节,主要是模仿了微信公众平台的消息交互方式以及生成签名的思路,而有所创新的一小点是,把消息密文的MD5值也参与到了签名运算中,增加了被仿冒的难度,同时也便于服务方校验消息在传递过程中是否有被第三方所篡改。
基于简化工程配置的考虑,本示例项目中没有使用spring,您可以在您的生产项目中把本示例中的代码改造成春哥的单例业务bean。密钥、token建议别直接写到春哥的context配置文件中,而是写在您的生产容器的环境变量中,防止被窃取。
另外,在本方案中生成签名的参数您可以酌情增减并调换顺序,替换签名所采用的算法,或者根据您的实际需要“个性化”一下您的加密算法,以期达到更好的安全效果。 |
|
|
|
|
|