00:01
各位大家好,欢迎继续收看上硅谷视频课程,我们继续的完成基于微服架构整合security进行认证授权的案例,刚才呢,我们编写完成了认证定义的过滤,在里边三个方法完成了认证的过程,那咱下面开始编写这个授权的管理器,下面开始给各位详细来写一下关于授权的。过滤器,那授权过滤器要怎么写呢?给各位做一个基本分析,咱们还是看一下咱之前这张图上,大家注意啊,我们现在认证已经完成了,是不是要授权呀?那授权怎么做?因为咱们认证过程中生成的token token它放到cookie中,每次通过he是不是要带这个ton过来呀?所以咱授权中做什么?首先是不是要从hide中把ton值得到,得到之后呢,从里边获取用户名,再比对red看它是否一样,如果一样的话,得到里边的权限列表,把这个给spring security,让它进行相应的访问。咱们做的设备过程就是head中取值,然后得到用户名,再从read中取这个权限列表,所以这是我们做的一个基本过程,之前咱都做了一个分析,那下面把这个我们继续来写一下,看他怎么来写。
01:27
第一个,我先创建一个类,比如这个类我就叫token author。Filter,然后咱们让这个类呢,来继承一个类,这个类就是这个叫basic authorer filter,这是权限一个最基本的一个过滤器,再让它继承这么一过滤器,然后咱们重写里边的方法。这里边啊,腰臂有一个有三构造,然后这个过滤器中的方法我们来看一下啊,主要是里边一个叫do filter1到,所以大就重写这个方法,在这个方法里边写一下,我刚才说这个过程取数据比对red,那咱家来做一下啊,因为现在我们用到这内容中需要这个token,还需要red,所以咱肯定需要把这两个对象给它传过来,跟之前这过滤的认证过滤器是一样的啊。
02:20
然后把这个给它直接复制在里边,我们给它做一个。设置。就是这么一个过程啊,然后下面咱就重写里边这个方法。Over right,我把这方法给各位复制过来,就是里边这个do filter的方法。给他拿过来。然后在里边写一下咱们的解体过程,就是这个里边的写法跟我们看这个代码中差不多,它里边也是你看啊,这个代码中就是这个过程,首先我们new就是得到这个user password author,这个token,然后在里边得到用户名,包括把这个权限信息放到你当前这个的上下文中,其实咱们做的也是类似于这么一个过程,那我下面给各位就来写一下啊。
03:14
这里怎么做,我在下面写下。首先。第一部分咱就先获取你当前。这个认证成功用户那个权限的那个信息,肯定是做这个事情,就是hardly渠道,然后比对red,那这里边我们一会儿比如写个方法,咱叫这个author。啊,我就教这个方法啊。然后在这个方法中,咱就取到这个信息,在里边我们传当前这个蕊块对象,这方法在一会儿完成,然后它取到之后返回的就是我们看到的这个对象,就跟这个类似,是咱是自己来取,就这个username part的auto to。返回的是这个。
04:01
我把这个说过来啊,咱就对照它的源码,把咱那代码能够快速改出来,然后这个得到之后,咱下面肯定是做个判断,如果这个值呢不等于空,咱就把这个权限信息放到咱们当前这个的上下文中,如果它等于空,那咱就给它做一些相应的一个处理啊,那我们来做一下啊,就是下面。做一个判断,如果说他有这个权限的信息,那就放到我们这个权限的上下文中。啊,就是那个contact里面去,那我们来做一下啊,首先我加个if判断。如果说这个author request这个值它不等于,那就不等于空,那咱给它就放进去,怎么放,咱看一下源码装右边都有,是不是就这个代码,咱把它我们就直接拿过来,给它就直接放进去就可以了啊,就是把这个给它放到我们需要的这个里边来。
05:08
这个啊,是我们写的一个最基本的这么一个结构啊。然后这个写完之后呢,在这个过程中呢,大家肯定需要有这么一个就是方法啊,就这个这个方法咱们就写到,所以下面我们就开始写一下这里边的具体的这个方法啊,就是这个方法。啊,就是它啊。那我们来写一下啊,这个方法呢,我们写到下边,然后这个咱一会儿再给它完善出来啊,咱最终比如咱们给他再做一个那个放行等等,咱一会儿完善,先写一下这个方法啊。各位各位脚下边。这些方法,比如来一个啊,就是private,它返回就是username password authors。Token这方卡名字叫get author,然后在里边呢,传入我们那个request那个对象,因为它通过request得到你的头信息等等一些内容,这是方法,那里边我们写结构,首先第一个咱先从hier里边。
06:13
获取你的ton。那我们获取一下啊,Request。点get header里边加上一个to。这个不知各位是否记得啊,咱刚才写那个认证过滤器的时候,我们是不是写过一个那个。信息啊,就是一个token,所以咱们根据这个名字取到它就得到了我们这个具体这个token的信息,然后得到之后,咱下面在里边呢,就是根据那个工具类,从token里边得到它的用户名称,但是我这位置我们需要做一个判断。我写一下啊,就是如果说这个token它不等于空啊,就是不等于,那那咱们这里边,我们就是从token这个字符串中获取到它那个用户名,咱们调用我们工具类中这个方法,咱之前写过这个方法,Get user in for for token里边。
07:16
传这个,然后这个返回的就是我们那个用户名。这些方法咱再回顾一下啊,之前写过是不是这用户信息啊,帮你把这个得到了啊。然后得到之后咱们往下来写,下面做什么呢?因为这个用户名得到了,那得到之后,下面咱是不是要从这个read里边获取它对应的那个权限的一个列表信息,把这是不是要得到,那我们给它得到一下啊,咱一定要用red。Time例里边一个方法叫OPS for value,点上一个叫get,传入你的用户名,然后它得到的就是权列表,但是权限列表的内容因为它有很多数据,所以咱用一个历史集合给它接收一下啊,因为它里边有可能会有很多的权限,比如里边我就先来一个string。
08:13
这个位置,比如叫这个permission。啊,Mi I。Permission这个value。List,我们就叫这个名字啊。这依赖引入这个位置,我们做一个。强转。这样的话,我们就从RA里边把这个数据给它就得到了啊,然后得到之后呢,因为咱们最后内容中啊,我要给它re return,就是我们这个token,这个对象就是你最后肯定要这么来写,我先写啊,最后这个结构啊,咱肯定是return new上一个username password author token,然后在里边呢,传入几个参数,第一个就是我们的用户名,第二个。
09:00
Token第三个是你的权限的这个列表信息,但是权限列表信息大家看到啊,就这个用户名,你的token,它的权限列其实是一个collection,里面是一个great author这么一个对象,所以咱需要把我们的例子集合变成这么一个对象。不是,各位是否能理解啊,就你这位置啊,其实传的就是这个东西,只是现在它的参数跟我们要求的参数不一样,你需要把例子集合呢,变成它需要的这个参数。因为它要求的是这么一个结构。这个可以看到啊,就是把例子变成这么一个集合,然后给它传进来就正确了,那咱下面它就快速给它来变一下啊。便怎么做呢?很简单,把这个便利,然后一个给它设进去就可以了,啊,给它塞进去,我先new这么一个,就是collection这么一个集合。呃,就直接扭了啊。U这么一个collection集合。
10:01
T。加他,然后里边比如叫这个author。这个啊,Connection就是它了啊,等于我们就是上一个叫。List的就是给它手动创建一个集合,然后把依赖我们给它引入进去。这引入,然后引之后咱把这个给它做一个便利,然后便利之后得到每个内容给它就是A的到这个机构中去就可以了,那我做一个便利啊,咱就写一个这个普通负循环了啊,然后我们加上一个。这个叫permission。Value加上我们这个集合啊,这些代码各位应该很熟悉了啊,我就不特别强调,应为都是应该说我们都知道的啊基础代码,然后这个写完之后,咱下面做的事情就是啊,因为里边有这个对象啊,就是它这个对象呢,它会对应有一个就是这么一个对象叫simple。
11:07
这个对象啊,然后咱们来一个叫author,等于new上一个simple。这个对象里边就传入咱们对应的这个。值啊,把这传入,然后传入之后,最后把这个对象就放到咱们这个collection这个集合里边去,点上A的方法,然后给它放入就是我们的。这个内容啊。呃,把这个给他就放进去就可以了。所以这样的话呢,咱就完成了里边一个最基本的一个结构啊,我把这个依赖先给它引住,就这样就完成,就是这样的话,你把list string这个泛型中的内容就放到了collection这个对象中的内容,给它做一个最基本的转换,然后转之后,最后我在这里边就来new这个对象,New的对象是这个author。
12:01
这个对象。这个啊,咱们就给它最终完成了,就是这么一个最基本的一个结构啊,当然这是不等于空,如果它等于空的,那我们就直接蕊吞一个,那这是关于我们说这个方法,这么一个编写,这咱们就做到了啊,然后做到之后咱们再来重复一遍啊,各位知道这个过程其实我写了这么多,过程并不复杂,它的过程就是先从header里边把token得到,然后通过token得到用户名,再去查询red red里边得到权限列表,然后最终给他re return,就是new这个对象。这样的话,咱们现在。就完成了这么一个基本的过程,所以各位把这个给它知道啊,然后完成之后,咱们把上面那个do filter这个方法给它最终完善一下啊,就是把这个方法给它最终写出来,然后最终就可以完成我们这个过滤器的这么一个编写。
13:02
那咱给他最终写下啊。好,现在啊,咱们给它改一下啊,这里边我们是通过调这方法得到当前这个权限,这个对象这些信息,然后咱把这对象这个给它传过来,哎,连个名字写错啊传过来这样的话就放到了当前C的上下文中,放完之后最后我们用这个。给它做一个do filter,就这么一个放行的一个操作,所以这样的话,咱们把这个授权的过滤器,我们就最终完成了里边就这过程,所以各位把这给他知道啊,主要写的应该核心的就是我们的这段代码。那我现在把这个代码给各位复制到我们的课件中来啊,各位按照这个过程能把代码给它编写出来。就是我们的这段啊。我把这个调到稍微小点啊,就这个代码。
14:01
所以这是关于我们两个自定义的过滤器,一个认证过滤器,一个授权过滤器,通过这两过滤器,各位应该能够更好理解security中的这个认证授权的一个过程,所以这个我们就完成了啊,然后做到这里为止呢,咱看一下我的课件中,咱们现在应该把我们下面这部分都写完了,包括这几类认证授权过滤器,还有相关工具类和处理类,所以在最后缺少是什么呢?就是我们这个核心的配置类,比如咱之前spring所那些核心配置,比如我配置哪些路径。不需要认证,包括配置我的登录页面,包括配置我登录路径等等这个内容,所以咱最后再编写和配置内,现在咱们把这些部分应该都给它完成了。
我来说两句