不要盲目使用新技术,说的就是你,JWT!
其实我更想聊标题的前半部分,后半部分只是拉出来做典型的。
简历上写上一句,“热衷于学习新技术”,孬管是不是真的,至少加分项是可以有的。
再看看标题,我是来搞笑的?
学习与使用,两回事
学习侧重于新技术的HOW、WHAT、Where(其实实际过程中很多时候后两个是忽略的)
使用侧重于。。。。。填坑!
开始我们的主题
标题写的,为什么?
在我看来
除非你是真的知道新技术到底解决了怎样的问题
除非你很清楚新技术有什么优点和缺点
或者至少你要知道新技术是用于什么场景的
你再用新技术也不迟,否则,就慢慢填坑!
否则,就是为了时髦买了条带洞的内裤却发现洞的位置不对还得再买一条正常的内裤!
JWT,拉出来当典型
为了避免被喷成筛子,三连划重点
JWT本身没有错!
JWT本身没有错!
JWT本身没有错!
无状态没有错!
无状态没有错!
无状态没有错!
我们聊的JWT对标的是 Session ,不是 Cookie
我们聊的JWT对标的是 Session ,不是 Cookie
我们聊的JWT对标的是 Session ,不是 Cookie
错的是什么?是盲目使用
在座各位有多少人能准确回答出上一节的三个问题?
- 你真的知道JWT到底解决了怎样的问题?
- 你很清楚JWT有什么优点和缺点?
- 你知道JWT是用于什么场景的?
给自己一个靠谱的答案,你为什么要用JWT?
我百度谷歌搜索了一下,发现用 JWT 的文章真的是少数,用 Identity 和 Session 的文章很多,这超出了我的预料
为什么身边的项目包括群友公司的项目全是 JWT?
JWT 与登录
JWT 的核心是无状态、自验证、无中央服务器,有超时时间等机制,我们所实现的登录功能,本质上是一个状态保持的机制,要保持,就会有断开的需求,JWT 能实现断开吗?不能。
JWT 的核心应用场景根本不是状态保持!
https://www.baidu.com/s?wd=jwt会话保持&rsv_spt=1&rsv_iqid=0x9d65b70000004423&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_dl=tb&rsv_sug3=11&rsv_sug1=10&rsv_sug7=100&sug=jwt%E4%BC%9A%E8%AF%9D%E4%BF%9D%E6%8C%81%20%E5%88%B7%E6%96%B0&rsv_n=1&rsv_t=576d%2BK65G9Uk60klbPpQEAyfnAnSKdDcE476BRPqSajtXpQkE0rXpLQDtHtdE8AvX51v&rsv_sug2=0&rsv_btype=i&inputT=4864&rsv_sug4=4864
百度早已有了不要用JWT做状态保持的文章,这根本就不是一回事!
JWT 的核心在于不需要中央服务器的验证,它可没说验证状态要保持啊。是的,超时时间的机制确实很像状态保持,但是因为 JWT 无状态的特性,它难以实现状态保持的完整功能。
比如说,我想续期,怎么办?
有的同学说了,旧KEY作废发个新KEY,作废的KEY保存在内存当中
你这和“我为了潮流买了个有洞的内裤结果发现外面还得再套一个内裤才不冷”有啥区别呢?
没错,这位同学的方案就是大家的方案,可是,这么明显的问题(不是JWT的问题),你为什么还要坚持JWT?
坚持JWT的重点就是无状态,然而作废的KEY保存在内存中不就又回到了有状态吗?你为什么还要坚持JWT?
大哥们推荐JWT的理由
我所知道的理由如下。无状态这条就不用说了:
- 不走 Cookie,移动端没有 Cookie
- 比 Cookie 更安全,CSRF攻击
这两条都有一个相同的问题,不用 JWT 就非得用 Cookie?
JWT 对标的解决方案是 Session,不是 Cookie
有人说 Session 就是基于 Cookie 的。
那么,Cookie 是基于什么的?基于 HTTP 头的
JWT呢?不还是 HTTP 头吗?
都是从头里读的,我改一下不从 Cookie 字段读不就行了?
有人又说,这不麻烦啊,现成的JWT方案很多,拿过来就用。
那么,出问题的时候你是加班到十点还是第二天第一个人打卡?
再者,Session 不见得没有方案,老外那帮人天天可是闲得慌。
JWT 的应用场景
这么说,JWT是。。。。废物?
哎别喷我啊你看完再喷呀。。。。。
我一直在找 JWT 的应用场景,但是除了三高(高并发、大数据、高可用)场景之外,我是真没找到合适的。。。
但是谷歌还是有大神,有位大神表示下面这个场景适用于 JWT
邮箱链接验证
这功能大家都知道,向用户邮箱发个链接,要求这个链接在5分钟之内点击来验证邮箱有效性,这个场景用 JWT 再适合不过了,量身定作的。
其他的,我是真不知道有啥场景。
不要再一切皆 JWT了
JWT 本身没有错,错在所有的项目全是 JWT。
JWT 场景之一是用于解决用户量并发量较大时,中央服务器无法及时响应请求的问题,Redis 在数据量达到一定程度后,QPS会大幅度降低,可是,这个量级是多少?至少几百万起步吧,我没试过。
各位看官你先把你的项目的日活用户量搞到几百万再说好不好,日活几百万距离几百万并发还差得远呢。
不要盲目使用新技术,说的就是你,JWT!的更多相关文章
- 006_饿了么大前端总监sofish帮你理清前端工程师及大前端团队的成长问题!
作者|Sofish编辑|小智 & 尾尾本文是前端之巅向 sofish 的约稿<什么样的人可以称为架构师?>.采访< 饿了么大前端团队究竟是如何落地和管理的?>以及 so ...
- BAT解密:互联网技术发展之路(5)- 开发层技术剖析
BAT解密:互联网技术发展之路(5)- 开发层技术剖析 1. 开发框架 在系列文章的第2篇"BAT解密:互联网技术发展之路(2)- 业务怎样驱动技术发展"中我们深入分析了互联网业务 ...
- 解密国内BAT等大厂前端技术体系-美团点评之下篇(长文建议收藏)
引言 在上篇中,我已经介绍了美团点评的业务情况.大前端的技术体系,其中大前端的技术全景图如下: 上篇重点介绍了工程化和代码质量的部分,工程化涵盖了客户端持续集成平台-MCI.全端监控平台-CAT.移动 ...
- 【免费开源】基于Vue和Quasar的crudapi前端SPA项目实战—环境搭建 (一)
背景介绍和环境搭建 背景 crudapi增删改查接口系统的后台Java API服务已经全部可用,需要一套后台管理UI,主要用户为开发人员或者对计算机有一定了解的工作人员,通过UI配置元数据和处理业务数 ...
- 在Django中使用zerorpc
在Django中使用zerorpc 前言 随着系统架构从集中式单点服务器到分布式微服务方向的迁移,RPC是一个不可回避的话题.如何在系统中引入对开发者友好,性能可靠的RPC服务是一个值得深思的问题. ...
- 基于APNs最新HTTP/2接口实现iOS的高性能消息推送(服务端篇)
1.前言 本文要分享的消息推送指的是当iOS端APP被关闭或者处于后台时,还能收到消息/信息/指令的能力. 这种在APP处于后台或关闭情况下的消息推送能力,通常在以下场景下非常有用: 1)IM即时通讯 ...
- 新技术≠颠覆:CIO 要有战略耐心
新技术≠颠覆:CIO 要有战略耐心 大数据,云时代,互联网思维, 物联网--最近一两年,这些字眼一次次地出现在各种大大小小的CIO会议上和他们的私下交流圈子里,作为对新技术最敏感的人群,一方面他们迫切 ...
- 新思想、新技术、新架构——更好更快的开发现代ASP.NET应用程序
在博客园学习很长时间了,今天终于自己也开通了博客,准备分享一些感悟和经验.首先感谢博客园园主提供了这么好的程序员学习交流平台,也非常感谢张善友.dax.net.netfocus.司徒正美 等技术大牛的 ...
- 华为5G空口新技术(2015年)
2015-03-24 长江后浪推前浪,4G建设方兴未艾,业界关于5G的讨论已如火如荼.对于每一代移动通信,空口技术都相当于王冠上的明珠. 在月初的世界移动通信大会上,华为发布了面向5G的新空口,并展出 ...
随机推荐
- 把项目从码云上clone到IntelliJ IDEA
前期工作:安装并已配置好git,并且IDEA已经配置好git了 操作如下: 1) 在IDEA启动页面选择Get from Version Control 2) 打开码云上想要clon ...
- Hadoop学习之第一个MapReduce程序
期望 通过这个mapreduce程序了解mapreduce程序执行的流程,着重从程序解执行的打印信息中提炼出有用信息. 执行前 程序代码 程序代码基本上是<hadoop权威指南>上原封不动 ...
- 快速构建一个springboot项目(一)
前言: springcloud是新一代的微服务框架而springboot作为springcloud的基础,很有必要对springboot深入学习一下. springboot能做什么? (1)spri ...
- 10分钟 Castle.Windsor 适配 Asp.Net Core 3.0
Asp.Net Core 3.0以上,不再能通过修改Starup.ConfigureServices返回值(IServiceProvider),所以只能调用IHostBuilder.UseServic ...
- 十分钟搭建自己的私有NuGet服务器-BaGet
目录 前言 开始 搭建BaGet 上传程序包 在vs中使用 其他 最后 前言 NuGet是用于微软.NET(包括 .NET Core)开发平台的软件包管理器.NuGet能够令你在项目中添加.移除和更新 ...
- FAT32文件系统下的文件、目录管理
背景 FAT32作为一个文件系统,有着广泛的应用.在安装操作系统时,许多个人用户默认都选择FAT32文件系统,因此,了解FAT32文件系统下的文件.目录的管理方式就显得非常必要了. FAT32文件系统 ...
- JVM补充篇
1.对象分配原则 1)对象优先分配在Eden区,如果Eden区没有足够的空间时,虚拟机执行一次Minor GC 2)大对象直接进入老年代(大对象是指需要大量连续内存空间的对象),这样做的目的是避免在E ...
- Python笔试——毕业旅行问题
毕业旅行问题 小明目前在做一份毕业旅行的规划.打算从北京出发,分别去若干个城市,然后再回到北京,每个城市之间均乘坐高铁,且每个城市只去一次.由于经费有限,希望能够通过合理的路线安排尽可能的省一些路上的 ...
- wifi渗透
前言 本文主要讲述 家庭家庭家庭中(重要的事情说三遍,企业认证服务器的wifi一般非常非常的安全破解不来)如何破解wifi密码,破解wifi密码后的内网渗透利用(简单说明),如何设置wifi路由器更安 ...
- jQuery的事件与 动画
什么是事件: 事件的本质是委托. Jquery的 方法: $().css(); $().click(); 等等. 鼠标的事件: 区别在于:mouseover与mouseout再进入或离开后会执行这两个 ...