Page 1
标准

1月9号,小程序使用体验

1.体验介于H5和原生App之间,对比H5没有明显的提升。
2.初次载入仍然会慢,微信后台切前台访问能快速响应,这里的缓存起到很大作用。
3.微信公众号可以5个关联小程序,小程序只能被一个公众号绑定,微信公众号多了一个入口,但是商家自身业务使用路径上又多了一个节点。
4.小程序不能推送消息,但通过被绑定的公众号可以推送。
5.提升了使用应用号的用户体验,原有应用号的H5的开发可以转为小程序。
6.小程序的工具并没有很容易,更没有达到让产品经理可以开发的程度,产品经理可以洗洗睡了。

标准

中国的IP数量统计

截止到2016年12月:

IP数量
中国大陆 336801997
电信 126337575
联通 65342986
移动 36048256
铁通 24828350
教育网 17166951
鹏博士 9806050
华数 525376
方正网络 741378
歌华网络 872384
阿里巴巴 4534348
标准

把数据源的类库从C3P0换成了Hikari,本地查询都能感觉出来有提升

http://brettwooldridge.github.io/HikariCP/

下图可以结论无论是Connection回收还是Statement回收,Hikari要比C3P0高不止一个档次,在数据库查询成为系统瓶颈是,这个数据源配置值得一换。

hikaricp-bench-2-4-0

 

  • One Connection Cycle is defined as single DataSource.getConnection()/Connection.close().
    • In Unconstrained benchmark, connections > threads.
    • In Constrained benchmark, threads > connections (2:1).
  • One Statement Cycle is defined as single Connection.prepareStatement(), Statement.execute(), Statement.close().

1 Versions: HikariCP 2.4.0, commons-dbcp2 2.1, Tomcat 8.0.23, Vibur 3.0, c3p0 0.9.5.1, Java 8u45
2 Java options: -server -XX:+AggressiveOpts -XX:+UseFastAccessorMethods -Xmx512m

Hikari并不是一味的快速创建和销毁资源,而是尽量使用稳定的资源完全无限的工作,这个思路和Spring的思路及其的类似。

下图可看出,Hikari引入后connection的数量稳定在80个左右,资源占用的稳定,这样就不会引起内存和CPU的抖动。

好的系统设计并不一定是小的占用,而是稳定的占用


2

日志

Stateless Authentication using Spring and SpringMVC without store token

中文标题利用Spring和SpringMVC完成无状态的鉴权服务,并且不存储Token

最近工作中,对开放给APP的API service的authentication module做了一些架构上的调整,主要完成了如下目标:

1,客户端(APP, web)登录后使用token进行鉴权。

2,支持集群部署。

3,彻底放弃session。

4,token不存储。(无论放到DB还是缓存中,都是一种消耗,token多的情况下,查询的开销也不小)。

 

思路:

之前查询过相关内容,最显著存在的问题是要依赖存储Token,这个存储的问题始终是一个梗,让我感觉不舒服,而且万一存储token的redis坏掉,那么整个系统瞬间会挂掉,集群带来的备份性又变成单一节点的限制,不能忍。想来想去,有个方法是可以尝试的,就是利用token本身的字符串来存储信息,具体做法是生成token的时候利用User对象生成的ObjectOutputStream然后加工一下,验证token的时候,把字符串再次转义成User,如果能成功则说明授权可以,如果不能成功则说明授权失败。朝着这个思路,找了很久发现了一个大神是这样搞的,文章是英文的,戳这里

感谢Arthur Arts.

He is an experienced Enterprise Java software engineer and hands-on Agile Coach and Scrum Master. He has a strong focus on agile engineering principles and practices and loves to share his knowledge and learn from others. He has his own company Coded Value, is a passionate photographer and writes for agilearts.nl.

 

不过可惜是SpringSecurity实现的,对这个框架一直无感,对数据库的表有要求,而且后期如果做第三方的鉴权登录,也是个问题。但是只要思路证明可行,这都不是事,动手把它改成SpringMVC的拦截器直接实现。

首先要搞定的是TokenHandler(token的生成和鉴权的工具类)

主要使用的是两个方法createTokenForUser(UserFront user)和createTokenForUser(UserFront user),具体的实现方法请参考下面的类。这个类大部分是Arthur Arts。

具体使用:

声明一个tokenHandler,并且利用@value注入一个配置文件的密钥,然后初始化tokenhandler以后就可以使用了。

 

接下来如果是密码鉴权的话就可以直接验证通过后,生成Token了

如果是第三方Oauth登录授权,就需要根据user的id查询一遍数据库,并且生成Token.

然后加入拦截器

 

妥妥的了!

 

有一个小问题,待结果,User对象中的password一定要ignore掉。

第二个小问题,token的长度可能需要通过控制user中field的个数来限制一下。//TODO

标准

java编译的时候竟然有对代码的自动优化

今天修改了一点小东西

加入了一个if block,条件符合直接continent;

为了验证一下class是不是编译成功了,用jd-gui看了一下,发现一个有意思的地方,java编译器竟然改动了代码逻辑:

牛逼!so,以后根本不需要管这些小细节,直接代码码上完事。

标准

一直有个疑问,邮箱为什么不默认打开图片,以前只是想到一点安全的问题,没想到仔细一查这里面的问题还真是挺多的。

来自知乎一篇不错的回答:https://www.zhihu.com/question/28411992/answer/40740280

一个典型的套路:http://www.freebuf.com/articles/system/59594.html

一个百度里的bug:https://fex-team.github.io/blog/2014/06/web-sec-2014/

 

一不小心受到启发,想整整办公室的网络。