其实我更想聊标题的前半部分,后半部分只是拉出来做典型的。

简历上写上一句,“热衷于学习新技术”,孬管是不是真的,至少加分项是可以有的。

再看看标题,我是来搞笑的?

学习与使用,两回事

学习侧重于新技术的HOW、WHAT、Where(其实实际过程中很多时候后两个是忽略的)

使用侧重于。。。。。填坑!

开始我们的主题

标题写的,为什么?

在我看来

除非你是真的知道新技术到底解决了怎样的问题

除非你很清楚新技术有什么优点和缺点

或者至少你要知道新技术是用于什么场景的

你再用新技术也不迟,否则,就慢慢填坑!

否则,就是为了时髦买了条带洞的内裤却发现洞的位置不对还得再买一条正常的内裤!

JWT,拉出来当典型

为了避免被喷成筛子,三连划重点

JWT本身没有错!

JWT本身没有错!

JWT本身没有错!

无状态没有错!

无状态没有错!

无状态没有错!

我们聊的JWT对标的是 Session ,不是 Cookie

我们聊的JWT对标的是 Session ,不是 Cookie

我们聊的JWT对标的是 Session ,不是 Cookie

错的是什么?是盲目使用

在座各位有多少人能准确回答出上一节的三个问题?

  1. 你真的知道JWT到底解决了怎样的问题?
  2. 你很清楚JWT有什么优点和缺点?
  3. 你知道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的理由

我所知道的理由如下。无状态这条就不用说了:

  1. 不走 Cookie,移动端没有 Cookie
  2. 比 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!的更多相关文章

  1. 006_饿了么大前端总监sofish帮你理清前端工程师及大前端团队的成长问题!

    作者|Sofish编辑|小智 & 尾尾本文是前端之巅向 sofish 的约稿<什么样的人可以称为架构师?>.采访< 饿了么大前端团队究竟是如何落地和管理的?>以及 so ...

  2. BAT解密:互联网技术发展之路(5)- 开发层技术剖析

    BAT解密:互联网技术发展之路(5)- 开发层技术剖析 1. 开发框架 在系列文章的第2篇"BAT解密:互联网技术发展之路(2)- 业务怎样驱动技术发展"中我们深入分析了互联网业务 ...

  3. 解密国内BAT等大厂前端技术体系-美团点评之下篇(长文建议收藏)

    引言 在上篇中,我已经介绍了美团点评的业务情况.大前端的技术体系,其中大前端的技术全景图如下: 上篇重点介绍了工程化和代码质量的部分,工程化涵盖了客户端持续集成平台-MCI.全端监控平台-CAT.移动 ...

  4. 【免费开源】基于Vue和Quasar的crudapi前端SPA项目实战—环境搭建 (一)

    背景介绍和环境搭建 背景 crudapi增删改查接口系统的后台Java API服务已经全部可用,需要一套后台管理UI,主要用户为开发人员或者对计算机有一定了解的工作人员,通过UI配置元数据和处理业务数 ...

  5. 在Django中使用zerorpc

    在Django中使用zerorpc 前言 随着系统架构从集中式单点服务器到分布式微服务方向的迁移,RPC是一个不可回避的话题.如何在系统中引入对开发者友好,性能可靠的RPC服务是一个值得深思的问题. ...

  6. 基于APNs最新HTTP/2接口实现iOS的高性能消息推送(服务端篇)

    1.前言 本文要分享的消息推送指的是当iOS端APP被关闭或者处于后台时,还能收到消息/信息/指令的能力. 这种在APP处于后台或关闭情况下的消息推送能力,通常在以下场景下非常有用: 1)IM即时通讯 ...

  7. 新技术≠颠覆:CIO 要有战略耐心

    新技术≠颠覆:CIO 要有战略耐心 大数据,云时代,互联网思维, 物联网--最近一两年,这些字眼一次次地出现在各种大大小小的CIO会议上和他们的私下交流圈子里,作为对新技术最敏感的人群,一方面他们迫切 ...

  8. 新思想、新技术、新架构——更好更快的开发现代ASP.NET应用程序

    在博客园学习很长时间了,今天终于自己也开通了博客,准备分享一些感悟和经验.首先感谢博客园园主提供了这么好的程序员学习交流平台,也非常感谢张善友.dax.net.netfocus.司徒正美 等技术大牛的 ...

  9. 华为5G空口新技术(2015年)

    2015-03-24 长江后浪推前浪,4G建设方兴未艾,业界关于5G的讨论已如火如荼.对于每一代移动通信,空口技术都相当于王冠上的明珠. 在月初的世界移动通信大会上,华为发布了面向5G的新空口,并展出 ...

随机推荐

  1. 5.15 牛客挑战赛40 C 小V和字符串 数位dp 计数问题

    LINK:小V和字符串 容易想到只有1个数相同的 才能有贡献. 知道两个01串 那么容易得到最小步数 大体上就是 第一个串的最前的1和第二个串最前的1进行匹配. 容易想到设f[i][j]表示 前i位1 ...

  2. java多线程的问题

    1.多线程有什么用 (1) 发挥多核CPU的优势 单核CPU上所谓的"多线程"那是假的多线程,同一时间处理器只会处理一段逻辑,只不过线程之间切换得比较快,看着像多个线程" ...

  3. windows:shellcode 远程线程hook/注入(五)

    前面几篇文章介绍了通过APC注入.进程注入.windows窗口处理函数回调.kernercallback回调执行shellcode,今天继续介绍通过heap Spray(翻译成中文叫堆喷射)执行she ...

  4. Linux的VMWare14中配置Centos7桥接网络环境(网络一)

    1.查看当前初始环境如下:在windows端先查看本机ip   ifconfig

  5. C++类、函数、指针

    1.初始化所有指针. 2. (1)指向常量的指针: (2)常量指针:指针本身为常量: 3.若循环体内部包含有向vector对象添加元素的语句,则不能使用范围for循环. 4.字符数组要注意字符串字面值 ...

  6. JAVA编程中你一定要掌握的“快捷键”

    JAVA编程常用快捷键 相信很多编程小白刚开始的时候,看向大神的时候都是双膝跪地满眼泪水的膜拜之情~不因为别的,就是因为他们可以随随便便敲出很多行代码,而且他们没有动鼠标!这时候就有人问了:“怎么才能 ...

  7. Android布局——单复选框(今天上课的内容总结下)

    怎么感觉最近补充的都是监听器的内容,今天学长提了一个新的监听器,看起来很牛批(因为很长) // 添加文本更改的监听器, TextWatcher是监听器的回调接口 text.addTextChanged ...

  8. 开启CAN通信学习(二)——基于Kvaser的CAN通信案例

    1 案例硬件介绍 Kvaser是瑞典的一家专门提供CAN和LIN总线分析仪及数据记录仪的公司,在CAN产品开发领域已经有近30年的经验,本案例选择的CAN通信硬件型号是Kvaser Leaf Ligh ...

  9. Python编程的10个经典错误及解决办法

    接触了很多Python爱好者,有初学者,亦有转行人.不论大家学习Python的目的是什么,总之,学习Python前期写出来的代码不报错就是极好的.下面,严小样儿为大家罗列出Python3十大经典错误及 ...

  10. linux系统中SSH免密设置报错

    执行 ssh-add ~/.ssh/msi_rsa 时报下面错误 Could not open a connection to your authentication agent. 解决办法: 执行命 ...