00:00
各位同学大家好,刚才呢,我们针对权限管理进行了基本设计思路的分析,包括咱们提到里边两个接口,一个是用户登录,一个是获取用户信息,那下面呢,我们把这个进一步给大家来分析,那咱们说什么呢?首先大家看我课件中的这段话,我这里写到登录成功根据什么token获取用户信息,信息中包含菜单权限以及按钮权限数据等,那这句话什么意思?给大家解释一下,到底它是什么含义,我在图里边给各位同学写一下。第一部分我们肯定要进行用户的登录,当你登录成功之后,注意啊,这个过程中咱是不是要保存一下,我们这个就是用户的这个状态,比如你现在给大家说的具体点啊,比如我现在我先退出去。
01:01
把这个退出,然后退出之后呢,我登录大家注意,当我登录是不是成功了,而成功之后,我在访问项目中的其他页面或者其他菜单,是不是都要得到当前的登录状态,如果说你当前不是登录,那我是不是应该不能操作,这是第一个场景,要得到当前动物状态,然后里边呢,还有第二个特点,我继续写一下。在这过程中呢,就是咱们登录成功之后。是不是要获取当前登录用户这个菜单和按钮的这个是不是操作的权限呀,什么意思呢?比如说我现在啊,我这个用户登录,他可以操作角色管理,可以操作用户管理,那这权限数据肯定可以得到,这个时候呢,比如说我这个用户直接去访问菜单,那肯定不能访问,这要得到,另外我可以得到里面的按钮,我在决策中,比如说当前用户只能进行修改和删除,别的都不能做,那这个权限数据咱们是不是也要得到,比如说我在整个项目运行中,我这些数据是不是都要随时都能得到?第一个用户状态,第二个就是用户的菜单和按钮的操作权限,这是我们要做的事情。
02:22
那这些怎么得到呢?大家想一下啊,这是这个功能该怎么实现。首先我写一下啊,就是第一种方式,咱们在Java web阶段应该学过一个对象,这对象的全称叫htp session,简称就是咱通俗说的session对象,这各位应该知道啊,Session什么意思,是不是代表一次会话,也就是说你现在打开浏览器登录,不关浏览器,那30数据中会一直能保留,咱从里边能得到数据,所以说第一种方式,咱可以把这个用户状态,包括用户这些信息放到session中存储是不是可以的,这个算是一种方式,可以实现我们的功能。
03:10
但是虽然可以实现这个灾呢,有这么一个缺陷,给大家做个说明。我这里写下啊,就有这么一个缺陷,什么缺陷呢?我来画一下啊。比如说现在啊,你这个项目是一个分布式的部署方式。分布式。虽然说我们项目啊,目前不是分布式,但是这个场景我们要考虑进去,什么叫分布式,比如说现在我有三个模块,或者三台服务器,每台服务器中部署不同模块,假如说这台是用户的这个模块,这台服务器是这个角色的,然后这一台是菜单的,注意它的场景啊,三个是不同的项目,另外他们在不同的这个服务中去,那比如现在我在用户模块。
04:00
登录了,注意是登录,然后登录之后呢,咱怎么做,我把数据可以放到我们那个session对象中去。我可以这么实现,但是实现之后里边问题就来了,什么问题呢?大家注意啊,我这三个对象是不是只在我当前这项目中能用,那我在这个项目中,还有这个项目中是不是肯定得不到你这里边session,因为他们是不同的项目,比如说这个session它做不到分布式里边能都取到里面的数据,虽然说有别的方式,但是单纯用它只能在我们的单一应用中解决,所以咱要把这个现象考虑进去。虽然说我们现在并不是分布式,但这个问题我们要考虑到。这个给大家再重复一遍啊,我们现在进行分布式部署,我用户是一个独立模块,放到一台服务器中,角色是个独立模块,菜单又是一个独立模块,那这个时候呢,我在用户模块登录向session中放数据,用户模块肯定能得到里面数据,但是角色模块他肯定得不到用户模块中的session,就这session它是没法实现什么,就是共享的,里边有这么一个问题,就是session。
05:18
他无法实现共享。所以咱们这个要考虑进去,那咱们怎么解决呢?所以给大家说明第二种方式,我在这里写一下啊,第二种怎么做呢,就是咱们目前要说的一种方式。怎么做?我们用这个叫token方式进行实现。那什么叫token呢?或者说这方式到底该怎么去用?给各位同学解释一下,首先我们说第一个问题。什么是token,我在这里边给大家解释一下啊,Token其实这个词啊,说的很简单,咱可以解释的就是更通俗点,那怎么解释,首先我这里边啊,我通过百度咱先搜索一下,就是token这个单词到底是什么意思,咱直接百度搜一下。
06:12
Token咱们看啊,Token这里边有很多的描述,大家看这个描述,咱就看一个字,这个字什么字,它的意思就是装啊,他就是装的意思,就是他特别会装。这个就叫token,那什么叫装呢?说的简单点啊,什么叫token,咱这么来说token呢,你可以列为就是按照。你自己约定的规则生成的一个字符串,然后这个字符串我们可以进行这个编码或者加密的一个处理,这个就叫。说的具体点啊,比如说现在啊,我在里边自己约定一个规则,这规则你可以随便约定,比如说我约定规则,我这偷开第一部分就是我的用户ID,然后加个井号,第二部分是当前的IP,第三部分是当前的这个时间戳。
07:12
包括再加上一个这个随机数。咱用它生成一个字符串,然后字符串生成之后,我把它再做一个,就是加密的一个处理,比如用MD或者用别的方式对它进行加密,最终就生成一个字符串。这个字符串呢,因为咱们按照自己规则生成并且加密,所以别人并不知道里边到底放的是什么,咱可以放用户ID,可以放时间戳,可以放你的权限数据等等,最终加密之后,这里边就是一个别人看不懂数据,但是其实里边有很多重要的信息,这个就叫token。所以我们目前的方式呢,咱可以这么做,通过token里边来存储我们的相关的重要信息。而存储信息之后呢,这里边面临一个新的问题,就刚才我们说这个问题,Session因为它没法共享,那token它怎么做到?我来说明啊,我们的做法其实很简单,我写到这里。
08:14
就是偷开,如何进行共享?给大家解释一下啊,这里边的实现方案我给各位写到这里。我们的解决方式就是。每次我们登录,就是你登录成功之后,咱们就是在这过程中会返回我生成这个。Token的字符串,当然里边会包含你的这个重要信息,然后反应之后呢,咱们在前端我可以把这个就是返回到cookie,放到我的cookie里面去,可以这么来做,然后放到cookie之后咱再怎么做,每次发送请求我们都来携带着。
09:02
这个toie进行发送,但是这个发送过程中啊,还有一个细节啊,就这个cookie问题,这各位要明确啊,就是cookie呢,它不能跨域传递,什么叫跨域,比如我现在啊,我通过这个就是at硅谷点com到新浪点com,那新浪点com中是得不到at硅谷传过来的cookie值,它只能在同一个域里边传递,不能快域传递,就是你的协议IP地址,端口号有任何不一样,那cookie就传不过去了,所以咱们直接传cookie还会有这个快译问题,所以咱怎么做呢?就这里写到的,每次发送请求,其他这个通恨值发送,而咱们可以这么做,我们把这个。Token值放到哪里?你的请求头里边传递,这是我们的解决方案。我这里边啊,给各位同学再说一下啊,我们项目中按照这个token方式进行实现,那怎么做呢?首先第一个token是按照一定规则生成的一个字符串,这个规则你可以自己约定,然后字符串可以进行编码,或者说加密处理,这个生成之后里边会写在我们的重要信息。
10:20
比如说你的用户ID等等,然后这token呢,怎么实现共享,因为咱在分布式中,那它的做法做法就是给大家说明,我们每次登录成空之后生成to,然后把to存到cookie里面去,因为cookie呢不能传递,就是你通过at.com访问新浪点com,那新浪里边得不到at硅谷传回来的cookie,所以咱们这么来实现,每次请求的时候,把cookie中等token值取出来放到哪里,就是这里写到的请求投里别,然后通过请求投径传递,因为每个请求都会存在这个请求头,它能解决跨域,这样的话就能实现我们说这个token共享,比如说我现在用户里边登录了,然后咱们访角色访问的时候,请求头里边带token,这里边得到,然后进行这个判断是否登录或者得到重要信息,包括菜单一样请求菜单请求头里边携带token,从里边取到。
11:20
判断是否登录,包括得到一些重要信息。以上就是咱们里边的这种实验方式,也就是我这里写到的第五过程,第一个接口,用户登录第二个接口。登录成功之后,根据token获取用户的信息,咱们token放到请求头中进行传递,这个我们就分析到这里。
我来说两句