高三时的杂想

思考自己,会发觉一个太复杂的物体,思想,学习,感情,朋友。。。我在学习的途中,我不是一个很好的学习者。即使如此,我也在努力。英语,语文我最头痛的,我是一点也懂不了的。我苦恼,因为我就要面临高考了。我恨我过去的日子没好学之。可我是真的一点也不喜欢。我强迫着自己,逼自己。结果也只是五六十分的料,面对这,我只能—60分万岁便够了。真的吗?兴趣,爱好主宰着。我只有在其他科付出更大的努力了!?唉。。。

读书,能要有目标的,学习知识,具体到每一章,每一节;每一天,每一次看书机会,都要把握住。可是,一句话说了:说者容易做者难。人不是专为学习的机器,我也是。我曾无数次打算着我要做什么,可往往被现实撕得粉碎,留下的是一次次的打算与一次次的。。。我在用自己的行动来骗自己,我是自己骗自己的骗子。有时,准会找个“理由”来安慰一下自己—自欺欺人。时间流走了,光阴世界就在这样的“骗”中走过一天又一天,一月又一月。。。计划着去做,可又真没做。付诸于行动,变得好难好难。其实,是自己缺少点什么,是持之以恒,是坚持就是胜利,还是。。。

或许,明天这一幕又将重演。。。

我该骂我一顿,然后去做。然而,脑子里还有许多许多东西。脑子是一个容器,可不要装太多,太杂,能只装一种,单纯地去对待吗?Try my Best!

 

— 一节自认为无聊的课写的无聊的话,写于那年那月

 

 

后语

从腐臭中捕捉芬芳,从晦暗中发掘光亮,从虚无中寻找没有,从绝境中搜集残剩的希望。

明天的路

— 此文写于2005年高三时的某一天

 

昨天,今天,明天,也就构成了我的生命。

昨天,已悄然离去,已画上了历史的轨迹。不再更改。今天,也就是现在,就是现在,已经证明我的存在,我的轨迹在一点一点地画上。而明天,是一张白纸,没有任何的痕迹。我在用自己的足迹去勾勒属于自己的路,是弯,是直,还是。。。我只知它掌握在我手里。我去走的。

明天,是一个未知的未来,没有任何可用的路让我去走,只有自己去创造,去开拓。我曾试着去寻找,可是,我只发现了一片空白,一片大雪无痕的景象。于是,我无法,我回到了现在,活在今天,此时,此刻,此地。我想我该在今天找到未来的路吧。就这样,我在今天活了十几年,从幼稚到明事,从小学到高中,从偏僻的故乡到这座城市(县城)。。。

俗语说,走过,路过,机会不要错过。我没错过,因为我一直都在寻找明天的路在何方?可是,等我每次找到明天要走的路时,才发觉,今天已经来临,明天呢?我扪心自问。某日,在高中的书本上翻到一句话—忘记过去意味着背叛,反思一下自己,觉得有可取之道。我去了过去一趟,翻开昨天的回忆,去逛了一圈。

昨天的本子上,已画得密密麻麻,仔细一瞧,我5岁时的天真与幼稚,在篮球场上疯踢足球的情景,中考后的喜悦,以及拿到录取通知书后的自豪等等。我想用橡皮擦擦去昨天的不好,可是擦不去。站在12岁的路口,我看见了13岁时的成长,终于我明白了,要是我才12岁,那13岁的成长不就是明天的路吗?还有14岁?15岁呢?还有14岁的那件好事不是吸取了12岁时的一个错误而做的吗?。。。我似乎找到了昨天的路。

我回到了今天,可是这已不是今天了,因为去昨天是花了时间的。我又成长了,又大了些。走过昨天,来到今天,畅想明天。原来,明天的路就在自己脚下,足迹就是勾画明天轨迹的笔。昨天的路为我明天的路作了铺垫,我则优而取之。明天的路,就是把拿好今天,去画明天的轨迹。

我又有何愁了呢?

 

 

后记

存在是为了活着?活着是为了存在?

Spring Boot中Spring Security OAuth2的变化(相比XML配置)

在升级使用基于 Spring Boot 的 Spring Security OAuth2 后,相比于XML配置,除了所谓的“零配置”区别外,

在OAuth2的使用与流程中有以下几点变化

 

1. resource-id 只能配置一个(或不要);在XML配置时,可设置多个resource-id(详细请点此);但在Spring Boot中,

一个程序中只能配置唯一的一个resource-id (详细请点此)—— 个人觉得是因为一个微服务就是一资源(resource)吧。

 

2.ClientDetails中的 client_secret 值加密存储;使用的加密方式与Spring Security的密码加密方式一致;这是安全上

的一大提升,点赞。

 

 

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

 

解决Spring mongodb 异常: java.lang.IllegalArgumentException: Could not determine IsNewStrategy (非spring boot环境)

在一次升级spring mongodb 的 版本为1.10.7.RELEASE后, 抛出如下异常

isnew

百思不得其解, 查看源码 IsNewStrategyFactorySupport 中有 getIsNewStrategy 方法,

getisnew

Why, 那肯定不是代码问题, 是配置问题吧(经验所想,旧版本1.5.6.RELEASE无此问题); 再从这方法名来分析 is new strategy (是否为新的策略)

这下确定肯定是某类新的功能配置没加上, 结果就是增加一配置,如下:

<mongo:mapping-converter base-package="your.package" db-factory-ref="mongoDbFactory"/>

 

在 spring的XML配置文件中添加即可解决. your.package 指定实体(domain)所在的包名

 

各类JWT库(java)的使用与评价

https://jwt.io/ 网站中收录有各类语言的JWT库实现(有关JWT详细介绍请访问 https://jwt.io/introduction/),

其中JAVA语言到目前(2018-06)有6个实现库,如下图:

jwt

按顺序依次是

Auth0实现 的 java-jwt

Brian Campbell实现的 jose4j

connect2id实现的 nimbus-jose-jwt

Les Haziewood实现的 jjwt

Inversoft实现的prime-jwt

Vertx实现的vertx-auth-jwt.

 

以下是各个库的使用测试

java-jwt

oauth0

完整测试链接  https://github.com/monkeyk/MyOIDC/blob/1.1.0/myoidc-server/src/test/java/myoidc/server/infrastructure/Auth0JwtTest.java

点评:

Auth0提供的JWT库简单实用, 依赖第三方(如JAVA运行环境)提供的证书信息(keypair);

有一问题是在 生成id_token与 校验(verify)id_token时都需要 公钥(public key)与密钥(private key), 个人感觉是一不足(实际上在校验时只需要public key即可)

 

jose4j

jose4j

完整测试链接: https://github.com/monkeyk/MyOIDC/blob/1.1.0/myoidc-server/src/test/java/myoidc/server/infrastructure/Jose4JTest.java

点评:

jose4j提供了完整的JWT实现, 可以不依赖第三方提供的证书信息(keypair, 库本身自带有RSA的实现),类定义与JWT协议规定匹配度高,易理解与上手

对称加密与非对称加密都有提供实现

 

nimbus-jose-jwt

nimbus

完整测试链接: https://github.com/monkeyk/MyOIDC/blob/1.1.0/myoidc-server/src/test/java/myoidc/server/infrastructure/NimbusJoseJwtTest.java

点评:

nimbus-jose-jwt库类定义清晰,简单易用,易理解 , 依赖第三方提供的证书信息(keypair), 对称算法 与非对称算法皆有实现.

 

jjwt

jjwt

完整测试链接: https://github.com/monkeyk/MyOIDC/blob/1.1.0/myoidc-server/src/test/java/myoidc/server/infrastructure/JJwtTest.java

点评:

jjwt小巧够用, 但对JWT的一些细节包装不够, 比如 Claims (只提供获取header,body)

 

prime-jwt

primejwt

完整测试链接: https://github.com/monkeyk/MyOIDC/blob/1.1.0/myoidc-server/src/test/java/myoidc/server/infrastructure/PrimeJwtTest.java

点评:

prime jwt库怎么说呢, 有些地方不符合JAVA语言规范, 支持对称算法(HMAC) 与非对称算法(RSA), 也算容易理解

 

vertx-auth-jwt

vertxjwt

完整测试链接: https://github.com/monkeyk/MyOIDC/blob/1.1.0/myoidc-server/src/test/java/myoidc/server/infrastructure/VertxAuthJwtTest.java

 点评:

Vertx Auth Jwt 库算是最不容易理解的一个库了.花了不少时间才弄通这一示例. 不容易上手. 并且生成与校验id_token 时都需要公钥与私钥,不足.

 

———————————————————

以下是在使用中的一些总结或注意点

1. 几乎所有库都要求JAVA版本1.7或更高版本, 1.6或以下的版本需要二次开发(或不支持)

2.从易用性, 扩展性, 完整性等来看, 使用首先推荐 jose4j, 其次是 Nimbus-jose-jwt.

3. JWT是实现OIDC的基石,掌握其使用对实现OIDC有很大帮助(同时对JAVA证书使用, PKI体系的掌握也有要求)

 

 

https://github.com/monkeyk/MyOIDC

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实现

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

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

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

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

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

2017-12-11