00:00
各位同学大家好,刚才呢,咱们通过spring security在我们的项目中完成了用户认证功能,那下面呢,我们通过来实现用户授权功能,那咱们下面做一个分析,然后进行具体实现,那我们来看一下啊,首先大家看这过程啊,我们要进行操作,第一部分是不是先登录,就是你进行认证,当你登录之后再判断当前登录用户是不是有这个菜单或者说按钮的操作权限,所以咱们现在就来做这个过程,就是授权的操作。那这个看滤cept限校,然这个过程这们之前好这个对象,然后这个对象里边呢,会包含你的权限信息,通过它来判断当前用户是否有这个访问资源的权限,这是我们一个基本过程。
01:11
然后这个具体该怎么做,首先我们先做一个总体思路的说明,然后咱们再具体做个分析啊,就是总体的思。咱们先看一下啊,然后总体什么思路呢?我给大家写一下啊,首先第一部分就是我们现在啊,我们首先要进行登录。咱们在登录的时候,我们是根据用户名和密码是不是进行登录,然后咱们完成这个过程,而登录的时候呢,咱们这里边除了我们之前做那过程之外,咱们现在还要做件事情,什么事情呢?就是根据我们的用户名要去查询你这个权限,就是你的用户操作的权限。比如说用户可以做这个功能里边的增加,修改,删除等等,要把这个进行查询啊,当然也可以根据ID查询,看你的实际。
02:06
比如根据用户名查出用户对象,然后根据ID查询都是可以做到的,但是总之要把这个查出来,然后查出来之后呢,因为后面咱要使用,所以目前我们是这么做的,我们现在啊,把这个查询出来,当前登录用户这个操作的这个权限的数据,可以给它放到一个地方,给它存起来,这个地方放到哪里呢?咱们目前就放到这个里边,就是里边这个red各位都清楚啊,是一个高效能的内存数据库,基于key value6进行存储,所以咱们现在第一部分我们可以做这个事情。我再重复一遍啊,我们进行登录的时候,根据用户名密码进行校验,然后这个过程中还要根据用户名把当前登录用户的操作权限数据查出来,比如说用户能做添加,能做修改,能做删除,把他的数据得到,具体查的话,其实就是查这个,咱们看一下这个菜单表里边各位看这个位置啊,比如你看里边,比如现在我这个是三,就是用户管理中,我们能做查看、添加、修改、删除等等,把这些值查出来,咱们之前有这个方法,一会儿咱们直接调就可以了。
03:22
把这个查出来之后,放到re中进行存储,然后咱们再来看啊,我们里边的第二部分,第二部分做什么呢?我们进行这个就是登录校验的时候,比如判断当前是否登录,在这个时候咱们除了校验登录之外,还要校验用户这个权限。就是当前用户的权限,那怎么做呢?我写一下啊,首先咱们从这个请求头里边获取到我们这个token的这个字符串,然后从token里边是不可以获取到我们的用户名称,可以得到,然后得到用户名之后怎么做,因为之前咱的数据是放到了中,比如说我们约定啊中的key。
04:08
位置啊,它的假如说我们就是用户名,然后Y6就是你那个权限的数据,那这个时候咱们从token中取到用户名,我们可以拿着这个用户名到里边。查询出那个权限的数据。然后查出之后,最终我们进行返回,然后再判断你当前是否有这个操作权限,所以以上啊是一个总体上的思路,我再重复一遍啊,咱只说总体一会儿咱会具体分析它里边的细节问题。首先第一个我们登录的时候进行密码的一个校验,看它是否正确,如果正确的话,根据用户名,咱要查一下用户可以操作那个按钮的权限,或者说我们这个操作权限,然后查询之后把这个权限数据放到red中,因为ready里边是key value,比如咱约key是用户名,Value是权限数据。然后第二部分,我们在校验的时候,从请求头里边获取到token字符串,从token里边得到用户名,拿着用户名查red,把权限数据给它得到,这是我们一个总体的过程。
05:24
而这过程中呢,咱们涉及到就是各种查询,也是咱们刚才写这个结构中很多地方都要进行修改,这是总体上的说明,就是根据他查询,然后进行判断,那咱们具体怎么做,咱们看细节的部分啊,就是具体它的实验过程。我这里写一下啊,首先我们要做的就是第一件事情,因为咱们啊,当然这个事情呢,我强调啊,我课件中有一个实现的顺序,你写的时候不一定是我这个顺序,但是事情都一样。这我应该说清楚了啊,就是这个顺序可能是我习惯的写法,比如说我先写这个后写那个,你可能先写后面,再写前面,这个都没关系,总之事情就是这些事情就是你的顺序,我们不用纠结,那我就按照我的习惯给大家来说明一下啊,咱要具体做哪些事情,我来写一下啊,首先第一件事情咱们需要修改一个方法,也就是我们的这个方法。
06:23
我把这个啊给大家写一下啊,就在咱们这个load user by username中这个接口方法,那咱们看一下这个方法啊,首先咱们找到在我们这个service OA里边找到这个实现类,然后在实现类中大家看是不是有这个方法,这个方法咱之前做的什么事情,根据用户名是不是得到这个用户这个对象,然后这里边我们把它进行返回,但是大家看啊,在返回的时候,咱们的第一个就是用户对象,第二个是不是写了一个空的,其实这个空的部分是什么呢?咱看里边这个空的部分理解为就是我们这个权限的数据,它是一个collection集合,所以咱们要做的事情就是在方法中得到你当前用户这个权限的数据,然后把它在里面进行封装,这位置反而是你的权限数据,这是咱们要做的第一件事情,我这里写一下啊,咱们做的事情就是根据用户名。
07:24
或者说可能是用户ID啊都可以,然后查询用户这个可以操作的权限的数据,最终进行封装。返回,然后封装的话呢,就是封装到我们这个user里边的第二个参数中,这个第二个参数就是我们里边这个权限的数据,我把这个啊给大家。复制过来啊,然后咱们特别说一下。就是里边的这个部分。就是我们那个权限数据,咱们之前只是写了一个now,因为之前没有做这个,目前做到的话,里边就是权限数据的集合,这时候我们要改到第一部分这个明确啊,因为咱要得到数据嘛,才能判断是不是有权限,然后这个之后我们还要改的,里边有第二个部分,咱们继续来看啊,我这里写一下啊,当然咱们写核心里边还有细节,比如咱们具体实验中再说更细节问题。
08:23
下面我来说第二部分。第二部分来呢,大家看啊,在我们的过程中,咱们有这么一个log。我写一下啊,第二个修改。我这里写一下啊,就是这里边我们要改的适应就是。
09:00
增加我们这个权限的数据的这个部分,那怎么增加,我们说具体点啊,大家来看啊,比如咱们找到这个方法中,在方法里边我们这位置首先肯定write那个相关的类,咱要给它传输进来,然后传入之后得到当前用户信息啊,包括做校验,如果成功的话就用这个方法,在这个方法里边我们看到啊,就是现在我们这行代码。大家看什么意思,是不是得到当前那个用户,然后从当前用户中,咱们可以把它的权限数据得到,因为咱们之前已经查过了,通过那个漏的方法已经得到了,得到曲线数据之后,把数据是不是能放到ready里面去啊,所以做的就这个事情。我这里写一下啊,我们具体做法就是。获取当前登录用户的那个权限的数据。把这个权限数据放到里面去中,咱们约定啊,它的key是我们的用户名,Y6就是我们的权限数据。
10:13
这是我们做的事情,或者说你的key可以是用啊,只要是一就可以了,咱目前是这么来进行存储,所以以上啊是咱们要改的第二个地方,在token的里边,在做登录校验的时候,咱们做这个权限数据的一个存储,最终放到ready里面去,这是第二部分这个明确啊,然后这个之后我们继续来看啊,咱们再看第三部分我们要做什么情。那大家想一下啊,第三个咱要干什么。做什么,比如说我们现在啊,就是我们现在比如说我们访问某个功能,比如访问一个列表,那访问列表的时候是不是要看一下当前我们的用户有没有这个操作权限,有的话咱们访问,没有的话是不能访问,所以第三个咱就要修改一下我们里边的这个,咱们找到啊,也就是他这个。
11:05
Kenun filter在这里我们添加就是校验那个权限的这个过程,我把这个过来啊,修改我们的这个组件。我们写到这里,然后在这里边咱们要做什么事情,大家看啊,首先我们看这个方法中,在我们的这个地方,从请求头里边咱们是不是得到了token,然后得到ton之后判断里边用户名是否等于空,不等于空表示咱们就就这个认证成功,但这过程中大家要加一个权限的部分啊,我这里写一下啊,我们的做法就是从请求投里边获取到to。然后从token里边获取到我们的username,就是用户名,然后获取之后怎么做?咱们是不是可以拿着用户名到我们的里边去查询他的权限的数据,因为咱之前存的话跟用户名作为进行存储,然后根据他在做这个相关的操作啊,这是我们要做的这个具体事情。
12:15
这个位明确啊,包括大家看一下我的课件里边,在课件中这里写到了就是我们的这个位置。从这个里边取到这个用户名啊,然后到中把它取到,然后最终完成它需要的这个封装,当然过程中呢,在这里边我这位置还用了这么一个对象叫local,通过它来存储当前这个登录这个信息啊,通过与当前线程绑定,用它进行存储,这时候我们要做这个事情啊。然后这个之后第三件事情,我们就做一个介绍,这个之后呢,我们下面还有第四件事情。我写这里啊,就是第四个要做的事情,第四个呢,我们就修改一下这个的配置,在里边加上我们的red那个部分啊,在里边做个修改,那咱们看一下啊,在配置类里边这个位置。
13:10
我们加上red啊,包括一些相关设置,然后加上注解,因为咱要基于某个方法进行判断,比如你访问那个列表方法,访问添加方法,什么修改方法,通过这个级别进行这个选的判断,把这个给它加上,然后加上之后我们到最后一步,那就是在CTRL里边的具体方法上加注解,通过它进行控制,比如说你现在访问的时候,通过它判断是否有这个访权限,有的话进行访问,没有的话提示没有权限。最后一步在CTRL里边进行添加下啊,我们这个功能的。CTRL里边添加上这个权限判断的这个注解,最终进行实现。所以以上啊,是咱们对于这个进行用户授权的一个总体的分析,这个咱们就说到这里,然后最后把这个我再说一遍啊,我们这个流程。
14:08
咱们再进行认证的时候,认证通过之后,我们现在根据用户名得到你的操作的权限数据,然后把权限数据放到re中,每次校验的时候,如果说认证通过,那咱请用头里边取到token token中取到用户名,根据用户名到re中得到权限数据,再进行这个相关的操作啊,这是我们总体思路,然后它的具体实现,咱们主要是改这么几个地方,第一个把查询方法中除了我们的用户对象之外,权限数据也查出来,通过它进行封装返回。第二个在登录的时候,我们把权限数据得到放到re中,第三个在校验的时候,从re中取到权限数据,最终返回,然后第四部分修改配置类,第五部分在CTRL里边加上权限判断的注解。
15:03
以上啊是一个总体流程的分析,通过它我们来完成这个用户授权。这位头明确啊,然后这个分析之后,下面呢,我们就开始具体进行实现。
我来说两句