性能文章>md!这代码有毒>

md!这代码有毒原创

133043

你好,我是yes。

刚想周五下午摸个鱼,直接一个钉钉消息打破了我的计划:有个bug。

我说:啥bug?

对方说:刚申请的内部用户的账号登录不上去。

我说:还有这种事,报啥错?

登录的时候报了这个错:

他的密码是这个的:

我瞄了一眼,这明显不含大写啊,你让他密码改成含大写的就行了。

对方有点懵:关键这密码是初始生成的密码啊!他现在登都登不上咋改!管理员重置密码的功能也都没做。

我:???初始密码生成竟然没大写。

我直接一波探索,找到了那块逻辑:

乍一看没啥毛病。。实则毛病挺大:

首先用的是 hutool 的 RandomUtil。

从代码逻辑来看,是想通过  RandomUtil.randomStringUpper(4); 得到 4 个大写随机字符,然而:

很显然,写这个逻辑的同学被这个方法名骗了,咱平日编码严谨点还是得点进去瞄一眼逻辑的。

所以通过 RandomUtil.randomStringUpper 并不一定能得到大写字母,因为可能都随机到数字。

如果说第一个坑我还能理解这位同学,那么第二坑我觉得真的有点秀了。

第二个坑:String randomString = RandomUtil.randomString(allStr.toString(), 18);

这又是几个意思??

好不容易 allStr 拼接了含大写、小写、数字、特殊字符,然后就搁这从中随机取 18 次?

那么问题来了,这18次一定能随机到大写吗?一定能随机到数字吗??

前面辛辛苦苦拼的各种格式的字符,最后靠随机取是吧,一切随缘咯。

你看看,这逻辑实现是不是有点毒。

不过回头想想,我来这公司也挺久了,是第一次收到这个反馈。。。说明之前运气确实不错。

这种随缘代码使用频率不高确实不容易发现问题。

不扯了,突然钉钉又推了一个消息。。线上有报错,容我去排查一波,有必要的话下周分享!

我是yes,我们下篇见!

 

点赞收藏
分类:标签:
yes的练级攻略

公众号【yes的练级攻略】,专注分享后端技术

请先登录,查看4条精彩评论吧
快去登录吧,你将获得
  • 浏览更多精彩评论
  • 和开发者讨论交流,共同进步

为你推荐

聊聊数据库连接池 Druid

聊聊数据库连接池 Druid

一次 Rancher go 应用内存占用过高问题排查

一次 Rancher go 应用内存占用过高问题排查

日常Bug排查-集群逐步失去响应

日常Bug排查-集群逐步失去响应

浅析AbstractQueuedSynchronizer

浅析AbstractQueuedSynchronizer

3
4