00:00
各位同学大家好,刚才呢,我们在总体上给大家说明了通过spring security如何实现用户授权过程,并且我们具体介绍了我们需要做哪些事情,那下面呢,按照我们刚才的过程,咱们一步一步尽情具体实现。首先我们先看第一部分,第一部分呢,我们来修改一下这个方法,Load user by username,在方法中呢,咱们根据用户ID查询用户操作的权限数据,最终封装,并且进行回。那下面呢,把这个过我们来具体写下,首先咱们找到啊,在service OA里边咱们有个现类user detail service实现类,咱把它打开,在实现类中我们有一个方法,之前做的过程就是根据用户名进行查询,返回优色对象,然后进行判断,最终进行封装返回。大家看到啊,我们最终返。
01:00
回的时候呢,用的是我们自己这个自定义这个用户对user在这里边呢,我们这个user对,然后第二个是不写了一个空的集合,其实第二个空的集合是什么呢?就是我们这个权限的数据的集合,叫grant author这个对象,所以咱们下面来把它仅封装,封装成一个集合,最终返回里边存储我们的权限的数据,那下面呢,咱们来具体写一下这个代码。首先啊,第一部分咱们调一下我们的方法,这个方法呢,就是咱们之前在菜单中应该写过这个方法,所以首先呢,把菜单的我们先注入进来,如果之前没有注入,你把这个注入一下,在里边我们找一下之前咱们写过的这个方法。那我们来看一下啊,这个方法find users user ID,咱们得到用户ID,根据用户ID得到我们的权限的数据,这个权限给名user list。
02:08
所以现在啊,这部分我们就完成,完成之后我在里边啊,咱们加个注释,为了各位看的更明确,根据用户ID查询用户操作的这个。权限的数据,这是我们做这个事情,但是这个数据呢,各位注意啊,咱们不能说把这个集合直接写到这位置,这是不对的,因为它要求是一种固定类型,就刚才咱们看到的这个类型叫grant al这个类型,然后咱把它打开看一下啊,这个类型是一个接口,它里面有三个实验类,找到这个叫simple。Granted时间内,所以咱们把它封装成我们的这个结构,那下面我们来写一下,看这个该怎么进行实现啊,咱们来做一下啊这个过程。首先啊,我们在里边呢,先创建一个新的集合,我们做个创建,就是这个simple granted,然后给它起个名字啊,就要这个。
03:12
ED的,咱就叫这个名字。或者说我就叫这个al啊,就是咱们权限数据。等于new上一个a list,这是咱们new的一个集合,然后把这个集合最终放过来啊,这是我们要做的事情,加个注释啊,我们创建一个list集合,用于封装最终的权限的数据,因为它要求的是这个类型,你传它是不对的,那下面继续来做,下面怎么做呢?把咱们查询出的list集合进行历。便利之后完成封装啊,那咱们来便利一下啊,这个过程首先在里边,它是这个string。
04:02
我们加上string。叫啊,然后加上这个集合,这是我们做的便利的结构,然后便利之后把里边这个就直接封装进去就可以了,那下面啊,咱们来做一个具体封装啊,这个过程应该很简单啊,咱就直接扭一下,然后把数据直接放进去就可以了。那我们来啊写一下,首先用这个author list的。点上A的方法在里边呢,就直接上这个对象,然后对象中来入我们这个啊,咱叫啊这个我们加上一个trip。这样的话就完成封装,所以现在在咱们这个list中有咱们最终的数据,最终在user里面封装,并且进行返回,以上啊就是咱写的第一部分,我们在这个方法中,根据用户ID得到权限数据,最终把它封装到这个对象中进行返回,这个我们就完成到这里,所各位把这个能给它写出来,注意它这个类型不要写错啊,但是这个simple guarantee的这个类型。
05:15
这是第一部分,然后这个之后我们继续来看啊,下面呢再来看第二部分,第二部分做什么事情呢?我们找到这个类Ken filter,这里边是做这个证过程,就是密码这个校验过程,如果成功怎么做,如果失败怎么做,咱们目前要做的事情就是在里边加上权限数据部分,当我们认证成功之后,咱们获取到当前用户的权限数据,把数据放到去,在让他的key用户value就是权限数据,所以下面我们来写下个过程,在这个n log in filter中我们做一个具体的实现。啊,那下面我们来开始做一下啊。
06:02
首先啊,因为要操作,所以一部分我们在这个模块中先把依给加进去,因为咱要进行相关操作啊,那咱找到啊。此外,添加上相关的依赖。这个咱们给它加入,把这个刷新等它下载出来啊,加载进来这步完成,完成之后打开这个类。Ken log里我把这个通俗用。通过的构造,把这个成这个这个对象啊table,所以现在这部分我们就完成。这个啊。To里,也就是它。
07:01
这位置啊,给他做一个传递啊,传到这个位置。这是我们传入这个对象啊,然后传入之后呢,注意啊,这里边报了一个错,因为传入之后你的配置类里面需要改这配置类,咱们一会儿再改,先把这个完成。然后咱们往下来看啊,这个方法咱们说过,得到提交管理的用户名和密码,封装成对象,最后调方法进行认证,当认证成功调这个方法,认证失败调这个方法,在认证成功里边,大家看啊,这是得到当前的那个认证成功的用户,生成token,然后在这位置咱们来做件事情,做什么事情呢?获取当前用户的权限数据。把得到,然后放到里去,让key是我们用户名称,我们的这个权限的数据,所以现在咱就来做这个事情,那这里边我来写一下啊,我们通过这个。
08:06
里这个OPS value方法value key就是里用名称啊,就这个username这个名称,我们从里边给它出来,然后放到这里去啊,就是用户名,Value是权限数据。咱们写这里啊,Custom user get username,然后权限数据呢,也是从里边给取出来,就这个啊权限数据,但是咱们放的时候呢,因为你注意啊,这个曲线数据呢,它是一个集合形式,咱是放到read中去,所以咱这么来做,给它转换成Jason格式,把Jason的格式放到这个ready里面去,那这里边我来写一下啊,通过Jason里面的方法叫to。Jason缀加入咱这个集合,所以现在把这部分就放到了ready里面去,T是用户名,Y6是确认数据,所咱们这部分就完成,也就是我这张图里面的第二部分就做到了啊,各位注意这个特点啊,通过请操作。
09:18
然后之后呢,我们完成之后,下面再写第三部分,第三部分做什么事情呢?咱需要修改这个类token aluthen filter在里做什么事情呢?就是每次做啊,咱们判断中有没有请求头里有没有这个token字符串,有的话取到用户名称,然后咱们拿着用户名称去查red,看里边有没有数据,最终封装进行返回,所以第三步咱就来做这个事情,做这个就是权限数据的这个操作的部分。那咱找到啊,这个我先关掉。来到咱们的这个类kenun,然后在类里边呢,咱们来看啊,这都是之前写过的啊,这里不再重复了,都做到了,咱们看我们的位置。
10:08
在咱这里边的是请求头里边得到token token里边取到用户名,如果用户名不等于空,那咱们直接new这个对象,然后的时候各位看啊,这位置是不是一个空的集合呀,咱最终返回的应该是我们那个权限的那个集合的数据,所以咱们下面在这里边我们来写一下这个过程啊,那咱们看该怎么去做。我这里先写一下步骤,然后进行实现,首先第一部分,当我们认证成功之后,咱们就是。通过这个用户名称从里边获取一下这个权限的数据,这是要做的第一部分,然后大家注意啊,这用户名称是不是就是它通过这个到中来取这数据,然后取完数据之后,我们看第二部分,因为取的数据的时候呢,咱们放的时候刚才刚写过是不是用这种Jason格式放进去,就是最终取出来的应该是一个字符串的形式,所以咱们要做个处理。
11:13
把里边。这位置啊,Read里边获取的字符串,这个权限的数据,给它转换成咱们要求这个集合的这个类型,咱们需要做这个事情,集合类型就是咱们刚才最开始返回的这个list simple的那个类型,也就是这个类型。大家看啊,也就是他。找到不是在这里,就刚才我们写到那个方法里边啊,我们来看一下,就刚才这个代码也写过,都是类似的啊。找到这里有一个方法,就是那个load user by username,咱们找到啊。这个位置,比如最终返回的应该是这么一个类型啊,把它进行返回。
12:00
下面啊,咱就来做这么一个处理,那怎么做我们进行实现啊,第一个从中先取到这个数据,而当前这里边呢,没有,所以同样把我们先入。这里写一下啊,加上private。然后通过它的构造,咱们完成注入。这里加上啊。汤里头。在完成完成之后里边咱们来做一下这个类型的一个过程啊,我们写到这位置啊。RA。点上S否点上加上用户名。返回到默认是个object,其实就是一个字符串的形式,我们加上string。
13:03
然后给它起个名字啊,我们叫这个。缀啊,这个位置做一个强转。变成缀,所以现在啊,把这个权限数据我们就得到了,然后得到之后呢,这里边要求的类型应该是一个集合类型,所以他要把这个字符串转成我们的这种集合的类型,最终才能返回封装,那咱们看一下这个该怎么去做啊,给各位做个说明。我这里强调啊,咱们看一下我们里边的这个类,就这个simple这个类,把它打开啊这个类。咱们。打开啊。然后在里边你看啊,比如我们做的时候用它的构造,咱们是入我们的数据,在这里边有一个叫get方法,你看get方法中,它里面的值是不是就是这个肉,所以它里边其实有一个属性,它的属性叫这个aler这个属性,所以咱通过它可以把这值取到,那什么意思呢?我们写的具体点啊,在这里边我们的做法就是首先我们先。
14:10
做一个基本的判断啊,就判断这个这一层字符串是否等于空,如果说你这值等于空,那咱也不需要再进行转换,加上这个string u.is empty al string,如果不等于空,我们来做这个处理,那怎么处理,用Jason里面这个方法叫pass AR RA,给它先转成一个list集合形式,然后这里边加上一个map。啊,这是我们做的这么一个处理,然后它最终变的是一个历次集合。我先写完啊,然后解释一下这个什么意思。比如叫这个map。List。然后大家看啊,现在这是不是这些字符串转成是list集合,然后list集合中的泛型是什么,是不是一个map,这个map里边就是有名称值,名称值啊在它里面最后转换它的名称是里边默认这个名字,刚才看到这个这个also这个名字。
15:09
所现在这个得到,然后这个过程中呢,一会儿咱也会通过de bug带着各位来看一下这个过程啊,包括把这个我们做一个输出,就是咱为了测试方便,然后之后呢怎么做,把它进行遍历,然后咱们进行这个就的处理,那我来做一下啊,创建一个例子集合,因为最终要求的是这个集合,我们给它起个名字啊叫这个。Author。List等于上一个a re list,然后把这个集合进行变利,啊,就是这个。就是它,我们做一个便利。便利之后呢,它的每部分是一个map集合。我们放到这个位置啊,这个map集合,咱们从map中把它值取出来,然后放到我们这个最终的例子集合中去就可以了,那我来放一下啊,map.get。
16:07
加上我们里边这个名字,就是刚才看到的这个名字啊,只是这么小写,按照咱那个命名规则。Get的方法,首字母小写这位置给它强转成这个string。最终啊,给他就放进就可以了,所以现在啊,我们得到这个结果。然后这个结果中把它要给它放到我们的这个对象中去啊,咱给他直接new就可以了啊,当然这个写的话呢,你可以写到一行中去啊,我为了各位看的更明确,咱分成多行来写是吧,要不然这么写很多同学他看不懂啊,咱分成多步来写啊,我本来是想给他写成一步,但是觉得这么做呢,有些人可能不太好理解,咱们分成多步来写啊。加上词缀。一个值啊,然后在里边这个位置做一个。
17:00
强转。转之后呢,然后咱们把这个对象给它一下。是simple的这个对象在里边把这个值给它进去,所以现在啊,这个集合我们就完成了,在集合中有咱们最终的这个数据,然后集合完成之后,最后呢,咱把它进行封装,并且完成退啊,我在里边封装一下啊,然后这位置加上咱们那个集合。Author list就现在就完成了啊,这是我们写的一个基本的一个结构啊,在if里边,然后咱们看这里边可以做后处理,如果说字符串等于空,那我们就直接反映一个空的这么一个集合。拿到这个位置啊,直接返一个空的就可以了啊,或者这位置你可以加上一个else啊,咱就来一个else。返回一个空的,然后空的里边直接上一个这个。
18:04
所现在啊,我们把这个部分咱们就最终完成了,这个我再重复一遍啊,我们的做法就是先传入red,然后咱们在这个过程中,当你这个认证完成,我们从里边根据用户名取到你的权限的数据,取到数据之后,因为它本身是一个G3字符串,我们转成要求的list集合,转成集合之后,最终封装完成返回在这里边进行权限数据封装,以上啊是咱们做的里边的这个这个部分就是在第三波里边。改这过程中取read中的全数据啊,所以这个完成,然后完成之后下面我们继续来看啊,咱们看我们的第四步,第四步做什么呢?我们就需要修改一下这个配置类,在配置类里边加入一些新闻内容,那里边加什么我们来看啊,首先我们加第一部分,在para上面加上一个注解。
19:06
我这些关掉啊,咱们找到那个配置类里边把这打开,也就是这个。第一部分加上一个注解。压到这个位置啊。注解,然后这个注解什么意思呢?给大家解释一下啊,我们来看到这里边的名字啊,Unable global method,注意method是不是叫方法呀,它表示含义就是什么呢?比如说我们现在啊,如果说咱们要访问的话,最终访问的是不是CTRL里面的方法呀,它就表示开启基于方法的安全认证机制,当我访问某个方法,这个方法访问的时候要进行一个认证,看他有没有访问的权限,这表示开启。然后之后呢,在里边咱们把这个入进来,后面要进行进之前这一你看这个user service这个M包括都给进来,这个完成,完成之后往下来改啊,下面改什么呢?就把咱那两个filter都添加上,因为刚才咱都加了构造里都传入了。
20:20
如果各位忘记的话,咱们看一下啊,首先第一个。在我们这个token里,你看它的里是这个,然后在这个filter中,我们同样做了一个传入。是不是他,所以咱们把这个需要做一个修改啊,那咱们来改一下啊,咱们可以看到这个,或者说你把这代码直接覆盖就可以了,我这里找到具体位置,各位写一下,第一个在我们的这个位置,就是token authentic filter里边加上。那咱们找到啊,这个位置就在我们的。这个地方。
21:01
加上啊把它入,然后还有一个在我们这个地方Ken log in中,把这个给也加入,我们加到这个后面。所以现在啊,这两个我们都完成了加入,然后其他部分应该不需要做什么特别修改啊,主要是改这两个地方,现在啊咱们就完成,比如说在里边这个第四部分就做到了,在配置类中添加了部分通过。存储全数据,最终从里边来获取全数据。然后这个之后我们继续来看啊,那就是我们的最后一步,最后一步呢,因为咱们在CTRL里边要加这个权限的这个控制,另外咱们还要操作,所以呢,我们在项目的配置文件中把配置给它加上啊,那这部分我给它加啊。咱们找到项目的配置文件,就是我们的这个位置。
22:01
打开加上的相关配置。这位啊,然后这个根据我们实际后面再改啊,先把基本结构加上你的IP地址号,内容加上之后,最后一部分在咱们具体的CTRL方法上边加上相关的这个权限控制,我们基于注解进行控制,那怎么加,咱们看一下我的课件里边啊,因为刚才配置类里边这个注解咱们加过了表示开启方法的权限控制。然后在方法上我们加上这个注解,这注解就是注解里上我们那个具体那个是权限个名字,比如说我们判断,如果当前用户有这个权限值能访问,没有的话,那他就不能访问,咱们以这个为例说明这部分啊,比如咱们拿过来第一个。我这位就是以角色为例啊,咱们也加到角色上,你加到别的里边也是可以的。
23:02
我就以啊角色为例。找到啊。咱们打开第一个我们这个列表,方法上我们加上这个注解。压到这个位置啊,这个注解。然后这个注解的含义是什么呢?当我当前用户查权限的时候,里边有这个值,那就这方法能操作,没有这个那就不能操作,这是那个列表,然后第二个我们加上这个,就是根据ID查询,我们也加上它啊,咱们找到啊,根据ID查询应该在这个位置。加上啊,然后加上之后再来看下面有一个添加,根据这个值也是进行判断啊,咱找这个添加的这个位置加到这里。包括啊,咱们可以再加上一个,就是这个修改以及删除,把这些都给它加上。啊,咱们找一个修改。
24:04
然后再找一个,就是最后这个删除。包括还有一个批量删除啊,都加这个木这个部分。给他加完啊。就是这几个值。所以咱们把这个完之后,大家看啊,我们现在基于完成用户授权的过程,咱们就最终做到了,这是我们完成这个过程啊,然后这个过程完成之后呢,咱们下面呢,把这部分我们进行具体的测试来试一下结果怎么样,那怎么试呢?我强调啊,因为刚才你看我这里加了不同的权限,比会咱们为用户重新配权限,再完成最终的测试,咱们把效果最终给他做到。那现在啊,这过程应该就完成了。
我来说两句