spring-oauth-server 2.0.0 发布,使用Spring-Boot2.0实现

经过一年多的时间后,我们发布了 spring-oauth-server 2.0.0版本.

使用Spring-Boot 2.0版本重构, 进入模块化,零配置时代. 更符合技术发展与实际需要.

相比之前的版本(1.0及之前版本), 更新如下:

1. 全新的 Spring-Boot风格

2.ClientDetails中的 client_secret 字段加密保存

3.密码加密方式由MD5变成 BCrypt

4.增加CSRF机制支持

5.resourceId变为可选(但建议使用固定的resourceId)

https://gitee.com/shengzhao/spring-oauth-server/tree/2.0.0/

mvn install 本地jar

仅此一命令, 记录下来常用.

mvn install:install-file -DgroupId={groupId} -DartifactId={artifactId} -Dversion={version} -Dpackaging=jar -Dfile={xxxx}.jar

 

私有lib配置 (pom.xml)

<repositories>
    <repository>
        <id>basedir</id>
        <url>file://${project.basedir}/lib/</url>
    </repository>
</repositories>

 

Spring Security 5中 PasswordEncoder的使用

在最新的 Spring Security 5发布版本中, 出于安全性的考虑调整了PasswordEncoder的实现与使用策略.

1.以前常用的实现 StandardPasswordEncoder, MessageDigestPasswordEncoder, StandardPasswordEncoder 不再推荐使用, 全加上了@Deprecated ,并有具体的说明

1

推荐使用BCryptPasswordEncoder, Pbkdf2PasswordEncoder, SCryptPasswordEncoder等

 

2.增加 PasswordEncoderFactories 类提供一个静态方法 createDelegatingPasswordEncoder()方法, 使用委托方式创建PasswordEncoder的实现

2

在此方法的实现中,实际上使用了 BCryptPasswordEncoder 作为默认的实现(我想, 这也是Spring Security团队推荐使用的吧).

 

3.关于加密salt(盐值)的变化. 在之前的使用中, 一般在使用时自己指定salt值,一个配置示例如下:

3

而在新的使用中, salt的实现 将由各具体实现类去处理(如使用随机生成的值), 以 BCryptPasswordEncoder的实现说明

4

如图,在进行加密时, 使用随机生成的salt值或由指定的 strength, random去生成.

比如原密码为 admin, 分别进行两次 bcrypt加密的结果如下

$2a$10$OEaUDkvTlWY/BpoAL7f.H.X7Cz9x3OR3pfWv5wasidP4B7izvyRy6
$2a$10$BBFV5eyg4YoBLThOzi1bDO0WYDBCzcLq3ISokgzxCB/CM0YTXHrha

里面也有 salt 的作用.

 

 

以上为使用 Spring Security 5中 PasswordEncoder的变化总结, 希望对你有用.

当然, 更安全的加密可以使用基于Spring Security提供的类去进行扩展自己的PasswordEncoder实现

Java HeartBeat 2.0.0 发布,心跳检测应用服务器的Spring-Boot程序

Java HeartBeat 2.0.0版本已经发布, 使用Spring-Boot框架, 全新的”零配置”设计,向微服务化靠近,抛掉沉重的XML配置文件.Java HeartBeat 是心跳检测应用服务器(如 Tomcat,Jetty)的 Java Web 应用程序。

2.0.0版本主要更新如下:

1).使用 Spring-Boot 框架重构, 向微服务靠近
2).使用log4j2替换旧的log4j
3).更新登录页面样式,增加版本显示
4).单元测试使用Junit替换旧的TestNG
5).Sitemesh使用3.0版本替换2.0版本

HeartBeat 2.0.0版本访问地址: https://gitee.com/mkk/HeartBeat/tree/V-2.0.0/

https://gitee.com/mkk/HeartBeat

读了《史蒂夫·乔布斯传(修订版)》(3)

“动力来自产品,而不是利润”
人们不知道想要什么,直到你把它摆在他们面前
创新中深藏着一种人文精神

然后产品的质量就变得不那么重要了.这些公司开始重视销售人员,因为是他们在推动销售,改写收入数字,而不是产品的工程师和设计师
他们不愿意费力气打造一家真正的公司,而这正是商业领域里最艰难的工作

我们相互间诚实到残酷的地步
如果你不忙着求生,你就在忙着求死
我们试图用我们仅有的天分去表达我们深层的感受,去表达我们对前人所有贡献的感激

或许他们是别人眼中的疯子,但他们却是我们眼中的天才.因为只有那些疯狂到以为自己能够改变世界的人,才能真正改变世界.
job

2017-12-11

2018年阅读计划

阅读自有书,2018阅读计划

  1. 《创新者的窘境》1月
  2. 《创新者的基因》5月
  3. 《鞋狗: 耐克创始人菲尔·奈特亲笔自传》
  4. 《那些古怪又让人忧心的问题what if?》2月
  5. 《硅谷百年史第3版 创业时代 创新时代 互联网时代(套装共3册)》
  6. 《周恩来转(精装典藏版)》6月
  7. 《李嘉诚:我一生的理念》6月
  8. 《点石成金:访客至少的WEB和移动可用性设计秘笈(原书第3版)》
  9. 《丝绸之路: 一部全新的世界史》
  10. 《细节: 如何轻松影响他人》11月
  11. 《逆向管理: 先行动后思考》4月
  12. 《金字塔原理: 思考, 表达和解决问题的逻辑》
  13. 《创华为: 任正非传》3月
  14. 《创京东》3月
  15. 《读者》2017年冬季卷  4月
  16. 《身份危机》4月
  17. 《黑天鹅》5月
  18. 《道德经》8月
  19. 《区块链-新经济蓝图及导读》7月
  20. 《架构解密-从分布式到微服务》6月
  21. 《黑客与画家》9月
  22. 《消防安全技术实务》10月
  23. 《赢在下班后》11月

读了《史蒂夫·乔布斯传(修订版)》(2)

“在人生的头30年里,你培养习惯;在后30年里,习惯塑造你” —乔布斯
报偿

一家伟大的公司给人的第一印象就必须映射出自己的价值观
Love is just a four-letter word
物质只把生活填满而不使之充实

产品是有灵魂的,是为了一个使命被生产出来的
此刻的失败者终将胜利

他一直确保他们是忠诚的,即使是对错误的忠诚
“苹果有很多出色的人才,但是他们在做错误的事情,因为计划本身就错了” —乔布斯

如果你不热爱这件事,那么你就不会多走一步,也不情愿在周末加班,只会安于现状
“分支”这个词本身就不吉利

永远不要害怕内部相残
与其被别人取代,不如自己取代自己
<<创新者的窘境>>

集思会
数字生活带来的孤立感

创意产生于自发的谈话和随机的讨论中
现实扭曲力
“我来给你们讲个故事吧”

job

 

2017-12-10

少一些大而全, 多一些小而精 — 我的开源观

看过了太多包含N多框架的,功能齐全的开源项目,总都是在宣称此框架能XXX,XXX.
开源挺好.
结果都一样, 走入另一个软件开发的沼泽继续不能自拔,深陷其中,无能更改与纠正.

软件是复杂的,复杂到超出了绝大部分程序员的能力,太多的广度意味着精力的分散,缺少深度
与比别人更浅层次的理解,太多的仅限于会使用,会弄,会满足当前项目要求,甚有直接从培训
学校搬出来的开源.
写程序,码代码,与做人做事毫无区别,你的时间在哪,成就就在哪,公平,公正.
迫于对工作的需要而不断地增加框架,整合框架,会用即是目的,功能实现即是高手.然后开源.
殊不知对软件,编程的理解少的可怜.天天一说便是熟悉这个,熟悉那个,一问深点啥也不知,
毫无羞耻感——最垃圾的程序员

对于什么是编程思想,什么是继承,封装,多态等等,说很容易,弄个简单的例子也很容易(网络
强大的好处之一),可真到了实际运用中,实际项目中,全然变成了以功能实现为目标,哪还知道
何谈抽象,何谈解耦,何谈扩展性…
说的都是人,可人才是根本的问题所在,人的能力,素质,身体,思想跟不上,何谈有小而精的深度,
精度.

“重复发明车轮”依旧是软件从业人员的常态.若把这提升到一个人的人生态度,就能更反映出有多少人是把软件编程当作一份职业,谋生的手段,而不是真正的热爱与自己的兴趣所在.
想想真是悲哀,那些一生没有追求过自己,三四十年的职业生涯都没干过自己最有兴趣,最有成就感的事——程序员首不其冲,无以回避.

你的精力,身体,资源,始终是有限的,过多的大而全只会在让你始终飘浮在一框架或技术的表面,
难以深入而有惊人的见解(有惊人见解的才是值得开源的).我曾对一些程序员说”如果你真正理解了MVC,那么你也能实现一个自己的MVC框架,而不管你用什么语言,什么方式”.只有真正的理解,思考,思索,再经过长时间的实践,结合书本,才能真正形成你的思想——你的编程思想.
每个程序员都有自己的编程思想,各不相同却又求同存异,健康发展.

个人认为开源首先要有”拿来用”精神,要勇于承认别人做的好的东西,尽量多的重要并吸收; 其次要有简化的精神,太深奥的技术(如class编译,加密算法)如何能用通俗的易于理解的话语来描述是开源的又一核心所在(能达到这一点的一般称为master),毕竟使用开源的,大部分是普通的程序员(即会用的程序员).
最后,开源一定要有专注精神,专注是社会进步的基石,只有专注才能做出精而深的开源作品.任何的开源都要像商业项目一样有明确的需求,要解决的问题,要达到的目的与效果,并坚持长久,不断优化,完善文档,使用说明等,才有可能成就优秀的开源作品.

基于现代的代码库,协作平台的广泛使用,要创建一个开源项目已是容易之更容易.你开源的是一件作品(而不只是你的代码),是你的编程水平,文档能力,综合水准的深刻体现.
对待开源的态度,即等于你对待软件编程的态度;是否成就优秀的开源,是否成为优秀的软件工程师,也是你人生的完全体现.

2017-12-12 凌晨