00:01
各位大家好,我们继续来学习security,刚才呢,我们讲到了spring security的认证过程,咱通过源码做了一个查看,刚才我们看到了这里,这过程中它会把未认证信息调用方法进行身份的认证,那我们下面还是通过源码进行深入的挖掘,看它内部是怎么做到的,那咱们下面继续来看一下啊,就这过程中是来做法就是啊,将我们这里边的未认证的信息传入进去,然后进行身份的认证,里边是调了这个方法进行实现。而这个方法中大家看到啊,它是在这个对象中调get authors CIRC manager是不是这个对象,所以它里面是调这里面的方法进行操作,那我们看一下啊,这个author CI manage它本身是不是一个接口,而这个接口其实它对应的有个实现类,它的实现类的名字就叫做provider manager,那我们现在就通过查看provider manager源码,看一下这个方法是怎么做到的,那我这里边给各位来写一下,也就是对应里边的。
01:16
第四个。我小的位置,咱们就来查看一下,这个叫provider。Manager。它这个源码看一下它那个认证的时间,这么一个过程,它是怎么做到的,那我们下面我们就做这么一个查看,在里边我这位置我就来搜索一下。Provide manager。那我们来找一下啊。就是关于这么一个对象。好,那咱们这么来找啊,我们直接这么来找,咱们现在找到这个接口就这个,然后接口里边呢,我们找到它的实现类,大家看看这个是不是叫provider manage,把它点开,咱通过这样找到啊,是一样的啊,然后在里边我们看一下它的源码是怎么做到的,我们强调啊,这个类呢,是刚才咱们说那个all CIRC manager的一个实现类,在这里边有个方法,就是咱们之前用那方法啊,那这样我把多余的类我先给它关掉,咱就保留我们目前需要看的两个主要的第一个这个里边有这个方法,那我们到里边可以找到这个方法,看他是怎么做到的,就这个方法。
02:40
那我们来看一下啊,就是在这里边呢,这个方法中它有对方代码,然后代码中首先咱们看它的第一部分,在第一部分中呢,各位看这里边他做了什么事情呢?其实它就是将获取出来这个奥K这个对象。把这个对象怎么样,也就是我们说那个之前咱说那个username password author taking这个对象,把这个对象给它得到,然后得到之后怎么做呢?你看里边啊,他做了一个处理。
03:13
什么处理?各位看这是什么?这是不是一个迭代器啊,就是通过迭代器这里边获取你认证里边这个信息,就是把这个你传回来的信息给他得到,就是第一个先把它变成一个卡的类型,然后把信息给他得到,然后得到之后它下面又怎么做呢?我们看啊,里边它做了就是。这么一个处理,也就是在这部分他做了各种判断,这个判断是什么呢?他就判断啊,当前我这个alls CI provide对象是否适用于我这个就是author username part token这个类型,就表示他们是否一样,然后这里边其实做的就是一个判断,判断它两个是否是同一个这个类型,如果是一个类型的话,就找到它体的关系,那下面就开始做这个认证的过程,比如里边到我们的这位置调我们这个provide中这个方法,那就进行这个认证,把我们传回来这个信息。
04:13
就是后面去查那个user底进行认证,它主要就是做这个过程,我再重复一遍啊,过程就是先得到我们这个传回来的信息,比方class,然后里边得到这个迭代器,得到里面内容,得到内容之后迭代进行判断,看他们是否是同一个类型,如果是的话,那调方法进行这么一个认证啊,它就是做这么一过程。然后认证之后如果失败,它就会抛出异常,如果说你成功的话,那里边会怎么做呢?它就将我们这个al对象里边的detail信息拷贝到里边去,所以各位看啊,其实它里边就是做了我们的这么一个处理。再往下找,你看这个过程中有一个拆开的这么一部分,而在拆开里边,它就是来做了这么一个事情。
05:03
包括调了方法,把你这个传过来的奥信息里边的detail套信息复制到我们这个最终这个对象里面去啊,它里边就是。做了这么一过程。所以这个啊,是咱们通过查看源码看的一个最基本的这么一个过程。所以这个各位给他就是了解一下啊,你知道他底怎么做的,其实说的简单点啊,认证的过程中嘛,就是把我们表单窗帘的数据给他封装成它要求那个对象类型,然后在里边他把这个数据得到进行比对,看类型是否一样,一样的话,那去后台查数据库,调我们的一个user侧detail,把数据得到返回它要求那个数据,因为它要求是一个detail这个信息嘛,包括你看这位置是不是一个copy复制嘛,然后把这信息给他拷贝到这个author CI kitchen这个对象中去,主要就是做了这么一个流程。
06:01
所以这个各位知道啊,包后面如果说认证失败,它的处理,如果认证成功,他做加的不同处理,也就是里边这个成功失败这么一个基本过程。所以它的底层源码中在provider里边做了对应的一个处理啊,我就不在图上写了,源码中都写到了,各位可以通过刚刚这个过程把源码给它好好去看一看,包括我在课件中把每步应该也都标出来了,就每步是怎么做到的,所以这个啊,我们就做了一个说明,关于它里面那个认证的过程。然后这个说完之后,咱们继续往下来看啊,就是刚才我们看这过程呢,应该算是这个认证的一个比较核心的过程,咱通过源码也是一步一步做了查看,看到了里边这个基本过程,那咱们最后呢,我们可以再回到我们最开始那个过滤器中,就这个U侧内帕对的ally filter中,到这里边我们来看一下啊,因为这里边我们清楚看到。
07:01
在这过程中呢,有很多的这些相应的方法,而方法里边刚才我们看一个叫type这个方法,这一方法里边它做的是不是就是获取信息,然后刚才我们说这过程,在这过程中呢,我们给你还有这个认证,包括失败这过程,那我们继续再看一下啊,认证失败呢,咱还是找他的负类。在附类里边,咱先找那个认证成功的方法,就这个认证失败是这个方法,所以咱们再把这两个方法看一下,那我们看啊,如果说这里边。就是你做这个认证成功,包括认证失败,如果认证成功的话,那我们做法就是在里边,咱看他怎么做的啊认证成功。各位看。这句话什么意思?里边有个对象是不是叫security context holder,就是这里边啊,当你认证成功,他就把认证成功的用户对象,就是咱说那个author kitchen对象,给它进行封装,封装到这个security context这里边去,到这里面行封装,并且存入这个对象中去,然后存入之后在里边他在做其他的处理,比如说咱之前有那个就是。
08:16
给memory me那种处理,包括这里边你有什么发布成功的处理,包括这里边你有调用认证成功处理器这个方法,所以认证成功它主要是做这事情,也就是说把你信息放到这个security康泰的中去,就这个对象,为了后面能做这个共享,如果认证失败里边有类似过程,包括它里边做这个处理,包括它调用认证失败的处理器。所以它里边主要有这过程,就还有这个认证成功,包括认证失败方法,我在里边也标注一下啊。第五个。认证成功。还有认证。失败方法,所以咱们现在就通过查看源码,把这过程给各位做了一个总体上的一个说明,各位把这过程给他知道,然后我最终给大家再快速重复一遍啊,这个过程是怎么做到的?首先我们做认证,认证的话呢,他肯定到我们的username passwor author filter里边,这里边呢,首先会调附类中这个do filter方法。
09:27
在do filter的方法中,先判断提交方式是否是put提交,如果不是的话直接放行,是的话进行认证。调里面的额肽的方法包括做三人处理,如果你成功,那调成功的这个操作失败,调失败处理,然后咱又详细看了它的底层,就是tap用的方法,Type里边呢就是在这过程中。我们判断破底交得到数据,然后进行数据构建,然后进行身份认证,认证过程中用到这个providerr里面的方法做这个认证,包括认证成功,认证失败方法,我们也是做了一个查看,所以这就是关于咱们通过查看源码,详细看了一下C里边如何进行认证的这么一个流程,包括咱之前写的案例中也是按照这个过程完成这个具体操作,所以从我的讲解,大家把这个源码部分可以给他好好去看一看,我这里边每一步应该都做了一个标注。
10:28
这个啊,我们就说完了认证的过程。
我来说两句