你的位置:首页 > Java教程

[Java教程]2015 最后一日 公瑾


   今天是2015年的最后一天,想想自己14号进来,两个星期好想都在闲逛,带我的@刘俊杰 好像都没有任务给我,然后就不知道干什么就一天了,他叫我继续看api的东西,我基本上全都看完了,大概有个了解,做个demo的也是可以的。他好像不怎么急,我也不想催他,免得他觉得我太过仓促,觉得我对事情不负责这样的。我就继续深究api的东西,昨天看了很久,也明白了很多东西。

   公司的api接口是整个系统的所有api调用的接口,公司业务也是很复杂的。PS:怎么博客园插入图片不行的呀,不会插,请博客园的大神教教。

   用debug来调试对应的junit的测试方法,然后发现有些地方不知道怎么走。首先是httpclient的模拟客户端发送请求,是发送到哪里的呢,之前没有用过,所以就百度了一下,是发送到对应的url,而发送的地址是a,过了一会是b.原来进行业务操作的时候,是要用户登录验证的,首先要调到验证的url然后返回对应的json数据,通过对应的Token来验证用户是否登录成功,现在我还不清楚token是用来干嘛的,之前在看慕课的微信开发的时候看到过,我也没有实践,不是很清楚了。这个验证应该是网页版的和微信公众号是调用同一个接口,然后就到了restController,贴出一些某些核心代码:

/**
* REST调用入口。
*
* @param request
* HttpServletRequest
* @param method
* String
* @return RestResponse
* @throws Exception
* 异常
*/
@SuppressWarnings("unchecked")
public Object rest(HttpServletRequest request, String method) throws Exception {

// 获取接口API名称
String api = "";
Matcher matcher = uriPattern.matcher(request.getRequestURI());
if (matcher.find()) {
api = matcher.group(1);
}
if (StringUtils.isBlank(api)) {
return ResponseUtils.getFailed(RestErrorCode.SERVICEISNOTEXIST, "该服务不存在", "");
}

String channel = request.getHeader("channel");

// 请求头信息
Map<String, Object> header = new HashMap<String, Object>();
header.put("method", method);
header.put("channel", channel);
if (log.isInfoEnabled()) {
log.info("访问接口API:" + api);
}

// 判断是否合法渠道
if (!ChannelConstant.validateChannel(channel)) {
return ResponseUtils.getFailed(RestErrorCode.CHANNELNOTEXIST, channel + "填写的渠道不存在,请确认渠道信息", "");
}
SdkClient.setChannel(channel);

Object result = APIFactory.call(getUrl(appVo.getUrl()), header, paramMap);
resultMap.put(appVo.getUrl() + appVo.getSort(), result);
}


Object result = APIFactory.call(getUrl(appVo2.getUrl()), header, paramMap);
resultMap.put(appVo2.getUrl() + appVo2.getSort(), result);
} catch (FtspException ex) {
log.error(appVo2.getUrl() + "自定义错误信息", ex);
resultMap.put(appVo2.getUrl() + appVo2.getSort(),
FtspJSONUtil.objectToJsonString(
ResponseUtils.getFailed(StringUtils.isEmpty(ex.getErrorCode())?RestErrorCode.FTSPEXCEPTION:ex.getErrorCode(), ex.getMessage(), "")));
} catch (Exception e) {
log.error(appVo2.getUrl() + "请求接口失败", e);
resultMap.put(appVo2.getUrl() + appVo2.getSort(),
FtspJSONUtil.objectToJsonString(
ResponseUtils.getFailed(RestErrorCode.SYSTEMERROR, "服务器繁忙!", "")));
}
}
}
}

return ResponseUtils.getSuccess("业务操作成功", RestOperateCode.GET_DATA, resultMap);
}

//小接口
return execution(request, api, channel, header);
}

 

 

 

查了一下:

      REST即表述性状态传递(英文:Representational State Transfer,简称REST)是Roy Fielding博士在2000年他的博士论文中提出来的一种软件架构风格。它是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。
目前在三种主流的Web服务实现方案中,因为REST模式的Web服务与复杂的SOAP和对比来讲明显的更加简洁,越来越多的web服务开始采用REST风格设计和实现。例如,Amazon.com提供接近REST风格的Web服务进行图书查找;雅虎提供的Web服务也是REST风格的。

     一开始不知道rest是什么,然后就百度了一下,就有了这串东西,然后就有了大概。用户的请求都会经过这个restController,然后就有了一个问题,为什么会到这个Controller不到其他了呢,应该有个

      用户进行业务操作会有两个请求这个是必须的。然后里面涉及到的细节问题,我也百度查了下,大概如下:

    private static Pattern uriPattern = Pattern.compile("/api/([\\w\\/]+)");

    Matcher matcher = uriPattern.matcher(request.getRequestURI());//使用了正则表达式获得相关字符串

     apis.put("sap/fpxx/cgfp", (API) ContextInit.getContext().getBean("ftsp_api_sap_cgfpAPI"));  @Component(value = "ftsp_api_sap_djxx_jsfsAPI")// spring的装配功能,对应的组件申明value,来作为beanID

     List<NameValuePair> nvps = new ArrayList<NameValuePair>();//声明键值 来用来传参数 使用httppost的时候

     还有就是MD5的加解密。以前也看过一些加解密技术,也只是有个了解而已,没有深入的了解,深入的研究。

  引用:MD5将任意长度的“字节串”映射为一个128bit的大整数,并且是通过该128bit反推原始字符串是困难的,换句话说就是,即使你看到源程序和算法描述,也无法将一个MD5的值变换回原始的字符串,从数学原理上说,是因为原始的字符串有无穷多个,这有点象不存在反函数的数学函数。所以,要遇到了md5密码的问题,比较好的办法是:你可以用这个系统中的md5()函数重新设一个密码,如admin,把生成的一串密码的Hash值覆盖原来的Hash值就行了。 

  md5是消息摘要算法,数字签名,易懂来说就是每个人的指纹了。一旦对一样东西使用了md5,就是你按了指纹,没有你的指纹没人能动你的东西。现实生活中,可以模拟人的指纹去干一些不好的事,类似的md5也不会例外,就好像一开始指纹作为安全的保障,然后现在指纹也变得不安全了,因此md5也是在劫难逃的。我在想,除了跑字典,还有更好的方式来破解md5吗?暂时还没有想到,想到我就不是一般人,哈哈。

  总结:感觉个人学计算机的东西很多,然后很多都有去涉猎了一下,大概有个了解,而并没有对一样自己喜欢东西去研究,去发展,现在做的java也不是我很想要的,觉得自己就是被生活逼迫到要学一样东西去找工作,而不是因为自己喜欢来学。我比较喜欢安全这方面的东西,安全涉及的东西真的很多,以前想学一些黑客的东西,然后就没了,后面到了游戏外挂,然后也没了然后了,总结了一点,计算机网络一定要学好。哈哈,想着自己计算机网络也是刚好60分。

  最后,我真的要一直做自己不喜欢的东西吗..... 

  年轻人 Follow your heart。