速读摘要文章源自JAVA秀-https://www.javaxiu.com/24496.html
我要告诉你的是一个经常犯的错误,一个会给你带来无穷无尽的问题的单词,那就是"users"。旅客可以使用预定记录码通过网站查看预定信息。远程网站控制着你的浏览器,并且开始将你的文件上传到他的服务上。如果你使用"用户"这个词来描述两个根本不同的东西,那么这个问题就更有可能成为你设计的一部分。MyBatis、Redis、MongoDB、ES、分库分表、读写分离、SpringMVC、Webflux、权限、WebSocket、Dubbo、RabbitMQ、RocketMQ、Kafka、性能测试等等内容。文章源自JAVA秀-https://www.javaxiu.com/24496.html
原文约 4529 字 | 图片 6 张 | 建议阅读 10 分钟 | 评价反馈文章源自JAVA秀-https://www.javaxiu.com/24496.html
永远不要,在代码中使用「User」这个单词!
点击关注 ? 芋道源码 文章源自JAVA秀-https://www.javaxiu.com/24496.html
收录于话题文章源自JAVA秀-https://www.javaxiu.com/24496.html
#芋道源码文章源自JAVA秀-https://www.javaxiu.com/24496.html
75个文章源自JAVA秀-https://www.javaxiu.com/24496.html
点击上方“芋道源码”,选择“设为星标”文章源自JAVA秀-https://www.javaxiu.com/24496.html
管她前浪,还是后浪?文章源自JAVA秀-https://www.javaxiu.com/24496.html
能浪的浪,才是好浪!文章源自JAVA秀-https://www.javaxiu.com/24496.html
每天 8:55 更新文章,每天掉亿点点头发...文章源自JAVA秀-https://www.javaxiu.com/24496.html
文章源自JAVA秀-https://www.javaxiu.com/24496.html 源码精品专栏文章源自JAVA秀-https://www.javaxiu.com/24496.html
原创 | Java 2020 超神之路,很肝~文章源自JAVA秀-https://www.javaxiu.com/24496.html
中文详细注释的开源项目文章源自JAVA秀-https://www.javaxiu.com/24496.html
RPC 框架 Dubbo 源码解析文章源自JAVA秀-https://www.javaxiu.com/24496.html
网络应用框架 Netty 源码解析文章源自JAVA秀-https://www.javaxiu.com/24496.html
消息中间件 RocketMQ 源码解析文章源自JAVA秀-https://www.javaxiu.com/24496.html
数据库中间件 Sharding-JDBC 和 MyCAT 源码解析文章源自JAVA秀-https://www.javaxiu.com/24496.html
作业调度中间件 Elastic-Job 源码解析文章源自JAVA秀-https://www.javaxiu.com/24496.html
分布式事务中间件 TCC-Transaction 源码解析文章源自JAVA秀-https://www.javaxiu.com/24496.html
Eureka 和 Hystrix 源码解析文章源自JAVA秀-https://www.javaxiu.com/24496.html
Java 并发源码文章源自JAVA秀-https://www.javaxiu.com/24496.html
来源:21cto.com/article/2093文章源自JAVA秀-https://www.javaxiu.com/24496.html
你没有使用者文章源自JAVA秀-https://www.javaxiu.com/24496.html
机票预订系统没有“users”文章源自JAVA秀-https://www.javaxiu.com/24496.html
Unix 没有 “users”文章源自JAVA秀-https://www.javaxiu.com/24496.html
SaaS 服务提供商没有 “users”文章源自JAVA秀-https://www.javaxiu.com/24496.html
“Users” 是一个安全问题文章源自JAVA秀-https://www.javaxiu.com/24496.html
前期设计的价值文章源自JAVA秀-https://www.javaxiu.com/24496.html
文章源自JAVA秀-https://www.javaxiu.com/24496.html
当你意识到你在项目开始时做的轻量、简单的设想竟然完全错了时,你已经用了六个月的时间投入到这个项目上。现在你需要解决这些问题,才能让这个系统继续运行下去,你发现你用在这个项目上的精力远远超出了你的预期,如果一开始就用正确的方式来做,就不会发生这样的事。文章源自JAVA秀-https://www.javaxiu.com/24496.html
今天,我要告诉你的是一个经常犯的错误,一个会给你带来无穷无尽的问题的单词,那就是“users”。文章源自JAVA秀-https://www.javaxiu.com/24496.html
这个单词有两个最基本的错误:文章源自JAVA秀-https://www.javaxiu.com/24496.html
对你的需求来说 “User” 几乎从来都不是一个好的描述。文章源自JAVA秀-https://www.javaxiu.com/24496.html
“User” 会导致一个基本的设计安全缺陷。文章源自JAVA秀-https://www.javaxiu.com/24496.html
“user” 的概念是模糊不清的,使用更精准的术语几乎总是能起到更好的效果。文章源自JAVA秀-https://www.javaxiu.com/24496.html
你没有使用者
最开始,没有任何一个软件系统真的有使用者存在。乍一看“user”是一个好的描述,但是你稍微一想就会意识到你的业务逻辑实际上比这要复杂的多。文章源自JAVA秀-https://www.javaxiu.com/24496.html
我会使用三个例子,从一个极端的情况出发。文章源自JAVA秀-https://www.javaxiu.com/24496.html
机票预订系统没有“users”
我曾经给机票预订系统写过访问控制逻辑,下面只是一小部分需求:文章源自JAVA秀-https://www.javaxiu.com/24496.html
旅客可以使用预定记录码通过网站查看预定信息。文章源自JAVA秀-https://www.javaxiu.com/24496.html
购买者可以通过信用卡号后四位数在网站上修改预订信息。文章源自JAVA秀-https://www.javaxiu.com/24496.html
旅行社可以查看和修改他们的预订。文章源自JAVA秀-https://www.javaxiu.com/24496.html
航空公司的值机人员可以根据角色和航空公司来查看和修改预订信息,这需要旅客提供身份信息。文章源自JAVA秀-https://www.javaxiu.com/24496.html
不再一一列举。一些与人类相关的基本概念是“旅客”,“代理”(网站也可是看作代理)和“购买者”。“user”这个概念根本没用,并且在许多请求中我根本不会使用这个单词,举个例子,我们的请求必须包括旅客和代理人的证件,而不是使用者的证件。文章源自JAVA秀-https://www.javaxiu.com/24496.html
Unix 没有 “users”
我们看一个不太一样的例子。Unix (这些天被称为POSIX)有用户,他们可以登录并执行代码。这样看起来很不错吧?我们深入看一下。文章源自JAVA秀-https://www.javaxiu.com/24496.html
如果我们把所有都当作“users”的话,我们将会有:使用终端或者图形界面登录的人文章源自JAVA秀-https://www.javaxiu.com/24496.html
像邮件或者web服务器这种系统服务也会以“users”的身份运行,例如nginx可以以httpd用户运行。文章源自JAVA秀-https://www.javaxiu.com/24496.html
在服务器上经常会有多人共享一个管理员账号用来SSH登录(例如,亚马逊的Ubuntu虚拟机默认SSH账号就是‘ubuntu’)文章源自JAVA秀-https://www.javaxiu.com/24496.html
root 身份,和上面其他身份都不同。文章源自JAVA秀-https://www.javaxiu.com/24496.html
上面四个是几乎不同的概念,但是在POSIX上他们都是 “users”. 一会儿我们就会看到,把这些概念都称为‘user’会导致很多安全问题。文章源自JAVA秀-https://www.javaxiu.com/24496.html
在操作上,因为POSIX的用户模型边界存在,我们甚至不能找到一种方式说“只能让 Alice 和 Bob 通过这个账号登录”。文章源自JAVA秀-https://www.javaxiu.com/24496.html
SaaS 服务提供商没有 “users”
Jeremy Green 最近就用户模型在SaaS中的应用在推特上发文,它第一次提醒了我写下这篇文章,他的基本观点是SaaS 服务几乎总是:文章源自JAVA秀-https://www.javaxiu.com/24496.html
某个组织中的一个人支付服务费用。文章源自JAVA秀-https://www.javaxiu.com/24496.html
一个或多个人共同使用这个服务。文章源自JAVA秀-https://www.javaxiu.com/24496.html
如果你一开始就把这些人作为一个用户,你将会陷入一个痛苦的世界。你无法建立团队模型,你无法组建同时为多人支付的模型,然后你就会开始改造你的系统。现在你在SaaS案例中学到了一课,我们来看一看你的生活。文章源自JAVA秀-https://www.javaxiu.com/24496.html
但是这只是众多例子中的一个:“users”的概念太模糊了。如果你开始怀疑“user”这个词,最终你可能发现最终你其实只需要两个概念:团队(用来组织关系和支付)和成员(实际使用服务的人)。文章源自JAVA秀-https://www.javaxiu.com/24496.html
“Users” 是一个安全问题
“user” 这个单词不仅是业务逻辑的问题,它也导致了一系列安全问题。“user” 这个单词如此的模糊以至于从根本上将两个概念合并了:文章源自JAVA秀-https://www.javaxiu.com/24496.html
一个人。文章源自JAVA秀-https://www.javaxiu.com/24496.html
他们在软件中的代表性。文章源自JAVA秀-https://www.javaxiu.com/24496.html
为了说明这个问题,假设你正在访问一个居心不良的网站,在它服务器上的图片导致了你的浏览器内存溢出。远程网站控制着你的浏览器,并且开始将你的文件上传到他的服务上。为什么它能这样做?文章源自JAVA秀-https://www.javaxiu.com/24496.html
因为浏览器是以系统用户的身份运行的,它被认为与人类身份的你相同,实际上你们是不同的。 你作为’user’,不想上传文件。但是系统的账号也是‘user’,能够上传文件,如果浏览器运行在你的账号之下,他所有的行为会被当作是你的意图,也就是说是你让它这么做的,实际上不是。文章源自JAVA秀-https://www.javaxiu.com/24496.html
这就是被称为Confused Deputy的问题。如果你使用“用户”这个词来描述两个根本不同的东西,那么这个问题就更有可能成为你设计的一部分。文章源自JAVA秀-https://www.javaxiu.com/24496.html
前期设计的价值
花更少的功夫处理相同的问题是成为高产程序员的关键。使用模糊不清的概念比如“用户”来组织你的软件,将会话费大量时间和精力来解决未来发生的问题。一上来就开始编码看起来是高产的,事实恰好相反。文章源自JAVA秀-https://www.javaxiu.com/24496.html
下次你开始一个新的软件项目时,花几个小时预先确定你的术语和概念:你仍然不会完全正确,但你会做得更好。未来的你将感谢你所做的所有预防浪费的工作。文章源自JAVA秀-https://www.javaxiu.com/24496.html
世界上最难的三件事情,可能就是“命名”、“命名”、“命名”。文章源自JAVA秀-https://www.javaxiu.com/24496.html
文章源自JAVA秀-https://www.javaxiu.com/24496.html
欢迎加入我的知识星球,一起探讨架构,交流源码。加入方式,长按下方二维码噢:文章源自JAVA秀-https://www.javaxiu.com/24496.html
文章源自JAVA秀-https://www.javaxiu.com/24496.html
已在知识星球更新源码解析如下:文章源自JAVA秀-https://www.javaxiu.com/24496.html
文章源自JAVA秀-https://www.javaxiu.com/24496.html
文章源自JAVA秀-https://www.javaxiu.com/24496.html
文章源自JAVA秀-https://www.javaxiu.com/24496.html
文章源自JAVA秀-https://www.javaxiu.com/24496.html
最近更新《芋道 SpringBoot 2.X 入门》系列,已经 20 余篇,覆盖了 MyBatis、Redis、MongoDB、ES、分库分表、读写分离、SpringMVC、Webflux、权限、WebSocket、Dubbo、RabbitMQ、RocketMQ、Kafka、性能测试等等内容。文章源自JAVA秀-https://www.javaxiu.com/24496.html
提供近 3W 行代码的 SpringBoot 示例,以及超 4W 行代码的电商微服务项目。文章源自JAVA秀-https://www.javaxiu.com/24496.html
获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。文章源自JAVA秀-https://www.javaxiu.com/24496.html
文章源自JAVA秀-https://www.javaxiu.com/24496.html
文章有帮助的话,在看,转发吧。谢谢支持哟 (*^__^*)文章源自JAVA秀-https://www.javaxiu.com/24496.html
阅读原文文章源自JAVA秀-https://www.javaxiu.com/24496.html

评论