@JFinal @qq596392912 读jfinal weixin源码有感,问三个问题:
1、 ParaMap pm = ParaMap.create("access_token", AccessTokenApi.getAccessTokenStr()).put("openid", openId).put("lang", "zh_CN"); 像这种JQ链式代码有没有一个好听点的名称,其实是用JAVA来模拟的动态语言特性是吧?那有没一个专业点的名称呢。我一直以来都是叫它链式代码。感觉有点LOW。。
2、// 签名检测 if (checkSignature(controller)) 这儿是否有必要每交都要去检测一下,会有安全问题吗?最开始配置URL及token的时候不检测了的吗?
3、// 将 ApiConfig 对象与当前线程绑定,以便在后续操作中方便获取该对象:ApiConfigKit.getApiConfig(); ApiConfigKit.setThreadLocalApiConfig(((MsgController)controller).getApiConfig());
在拦截器中我看用户每次请求时都会把apiconfig对象放在本地线程中,如果用户量大了这个内存中的本地线程数量岂不是会很大(当然可以放在redis缓存中),并且同一个用户如果多次请求也会重复的set进去,是否有必要先判断一下呢。还是直接覆盖?
小弟才疏学浅,看了jfinal weixin的源码大半天了,有点小兴奋,提出如上几个问题。希望大神帮我解惑一下。
不好意思,回复晚了,这几问题其实提得很好,少有人注意到这些,在此简单做下回答:
1:这个一般叫链式方法调用,由于 setter 都是极度可靠不会抛异常,并且是极度易于理解和致性的代码,做成链式调用,可以将多行代码缩至一行,对可读性有好处,当然,这个不同的人可能有不同的看法,有些人喜欢那种多行调用的方式
2:jfinal weixin 作为一个框架是一定要每次检测的。这个检测是为了防止有人恶意假冒微信平台发消息过来,对系统进行攻击。每次检测可以得知当前信息是否是微信官方平台发送的。
例如你的项目可能涉及转账汇款的业务,恶意攻击者可以在你服务器链路适当节点处,先开启 http 嗅探工具,然后再真实地去进行转账汇款业务,很容易就得到了交互数据与逻辑规则,然后就可以模拟发送类似的数据包,将你的钱转走。嗅探工具满地都是,极度方便。
如果你的系统不涉及关键业务,倒是可以做成不每次检测的,不过这也意义不大。因为你可以测试一下那个签名检测方法的性能,应该在每秒百万量级,性能损失可以忽略不计。
3:不要只看到这行代码:ApiConfigKit.setThreadLocalApiConfig(((MsgController)controller).getApiConfig());,后面的 :
finally { ApiConfigKit.removeThreadLocalApiConfig(); }会确保 threadlocal 中的资源被释放, finally 块不会去理会 try 中发生的异常,始终会被调用。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。