00:00
各位同学大家好,刚才呢,我们基于security完成了一个入门案例,让大家感受一下它的基本的使用过程,咱们刚才提到了security底层用到的就是过滤器,它通过一系列过滤器最终实现这个过程,那下面呢,我们今后我们项目实际通过这个框架实现用户认证以及用户授权,首先我们先看用户认证,在实现用户认证之前,给大家分析一下security实现用户认证的流程是怎么样,咱们先分析它的流程,然后通过看源码给大家进一步解释它的这行过程。那下面呢,我们看这张图,给大家分析一下基本流程是怎么样的,这张图呢,我把它截出来,到这里边我们做一个详细的说明。那我在里边写一下啊,首先我们做认证的第一部分,大家想一下,咱们在页面中是不是要输入用户名和密码呀,这是我们的一部分。
01:04
然后输入之后我们进行提交,提交之后怎么做呢?我们继续往下来看。提交之后呢,我们进入到第二步操作,在第二步操作怎么来实现呢?大家看这张图里啊,在security里边有个工具类叫username partwd filter,通过它把我们请求信息分成一个对象,叫,然后通过一个时现类userme passwdke,这是我们的第二步,我写一下啊,把咱们的用户,就是提交的用户名密码封装成一个对象。然后这个对象名字叫这是我们的第二部分,然后之后我们的第三步在里边会调用一个方法O方法来实现这个认证啊,包括第四步就是委托他做这个认证的这么一个过程。
02:06
这里写一下啊,就是认证,然后大家看里边的第三步和第四步脱离划到的,然后之后呢,我们怎么来做呢?咱们继续往下来看,在第五步操作里边这个过程中,因为咱要认证嘛,认证说的通俗点就是登录,所以第五步我们会调用一个方法,就这个方法叫load user by username。根据用户名去查询你的用户的信息,说的简单点就是查我们的数据库卡,数据库里边存的用户信息是什么,包括你的用户名,包括你的密码。这步之后我们的第六步操作写一下啊,咱们查询出用户信息之后,会返回一个对象叫user user里边包含用户的详细信息,然后这个之后第七步操作,我们会进行这个密码的一个比较,就看这个密码是否相同,就是我们数据库中存的密码跟你输入的密码是否一致,这个过程中我们要进行加密的比较,比如用MD5等方式进行加密。
03:16
当然它里面有自带的方式,咱也可以自己在自定义的时候自己约定降解方式,这是第七步做密码比较,然后密码如果说相同的话,它第八步会把咱们这个对象再给它填充回到我们这个oification这个对象里面去,最终把它进行返回。这是我们的第八步,然后这个之后呢,我们的最后一步,也就是第九步操作,第九步做什么呢?把咱们刚才好这个类似于我们JA中那个contact上下文对象在项目中这些地方都可以到。
04:06
我写一下啊,把返回对象放到我们那个上下文的对象里面去,然后在项目中进行使用。以上就是spring security进行认证的一个基本过程,我们再来重复一遍啊。第一步,提交用户名密码,然后把这用户密码放成一个对象,封装对象之后调方法进行认证,就是第三步,第四步,然后认证过程中它会调用方法,根据用户名查我们的数据库,返回数据库中存的信息。第七步,进行密码的比较。比如说你的密码是否一致,如果密码相同,把这个对象再填充回到这里边去,最终返回,把返回对象放到我们的上下文对象中,在项目中可以进行使用。以上就是认证一个基本过程,这个我们做一个说明,然后这个之后下面呢,我们通过源码带着各位来看一下这过程,然后咱通过bug也做个调试,就是把这流程给各位来走一遍。
05:11
那咱们来看一下啊,这个过程首先我们先找到第一个类,咱们可以双击两个shift,然后在里边搜索这个类,就叫username password filter,把这个打开。然后大家看啊,就是我们的这个类,然后在这个里边呢,我们找到一个方法,这个方法,这个方法什么意思呢?就是获取到咱们输入的用户名和密码,我这里加个断点,一会咱会调试啊,大家看这两个方法啊,它是得到用户名和密码,咱们点进去看一下。这方法各位应该都见过啊,Get perer,得到提交过来的表单数据,然后得到之后它的下一个操作,在这行代码中我们看啊,用到一个类叫做username partw token,通过它把用户密码封装成一个叫这个对象,那我们看一下啊,在这个里边它用到这个构造,然后里边传数据进行封装,因为这个类它继承了一个类,就这个类把它点开,然后这个类又实现了一个接口叫ification,所以最终方成这么一个对象啊,这是我们看到的,然后咱再回来。
06:29
封装成对象之后,它下面调一个方法,这个方法叫autoca,通过它来完成这个认证,那咱们把这个方法点开,这里边做到认证,然后认证中呢,有很多的实现类,咱们找到这个实类叫provide manager,把这点在这个里做这个认证过程,然后认证中咱们核心部分啊里边了这个方法,然后进行具体的认证。
07:00
那咱们把这方法点开,然后找到它的具体实现,咱们找到这个类看到啊user开,然后里边开始做认证,得到你的这个数据啊,当然里面涉及到这个的过程,然后最后这个方法。进行这个具体这个就是过程啊,咱们把它点开。到这里面。然后大家看啊,这个方法中做了什么事情呢?刚才提到的调了一个方法叫load by load user by username,根据用户名称进行查询,返回一个user对象,把这个返回,然后返回了这个对象之后,咱们回来啊,啊,继续回来。还是到这个认证方法中,他得到这个对象,然后得到对象之后,下面把这个对象开始做这个密码就业,主要是调了这个方法啊,咱们进入啊这个里边,你看里边啊,做了这个校验。
08:04
根据密码比较,看它们是否一致啊,他就做了这么一个处理啊,就是到了这里边,如果说你密码相同,那表示教案就成功了,那咱们继续回来啊,还是回到这里边。如果说校验成功之后,那怎么做,他就把这对象再重新填充回到那个altic里边去,最终进行返回所,最后调入这个方法,你看把它做了一个返回,这是我们看到的,然后返回之后它进入到最后一步,咱们找到我们的这个username password,这个filter里边找到它的类,在类中咱们找到这个方法。啊,大家看啊,在do filter里边最后有这么一个方法,当你认证成功,他就这个方法,然后这个方法中做了什么事情,就这个事情,把咱们这个对象最终放到这个叫security里去,就是它的上下文对象中,我们供项目中进行使用。
09:06
以上就是一个基本的过程啊,我们再来给大家重复一遍啊,然后通过d bug我们做一个具体的一个测试,首先得到传过来的用户名密码,把它封装成一个叫。这个对象封装之后,调一个叫方法进行认证,然后到我们这个叫provide里边做这个认证过程,在认证里边我们进入。找到user detail这个方法,然后在里边取到你这个方法啊,进行这个认证就是调它。然后咱们到里边啊,通过方法查我们的数据库,把用户信息得到,然后得到之后把这个进行返回啊,咱再回来到刚才那个方法中。这里边啊,然后把这个得到数据返回,返回之后下面做这个就是校验,判断你的密码是否一致,就是到这位置,如果它一样往下进行,如果不一样,那就失败,如果它相同的话,继续往下来看,它就是把我们这个返回到O对象,给它再回填到,或者给他再填充回到这个对象中去,就是最终来到这个方法中回填回去,然后给他之后来到最后一步,把返回的对象最终就放到咱们这个上下文对象中contact中去。
10:32
所以现在啊,这个过程给大家做了一个说明,就是按照刚才我说的这张图里边的。流程进行的,那下面呢,我们再用bug把这效果给它再测试一遍啊,我现在应该都加了断点。我现在用debug启动,然后咱们做个测试,试一下这个效果是怎么样。我们来试一下啊。访问一下我们刚才那个路径啊,还是以刚才这个为例,就是它。
11:04
现在啊已经启动了,然后你看里边啊有这个密码,然后现在为了测试方便,我把这个缓存这些东西先给它清掉。我们再进行访问。访问之后进入到页面,输入右侧,再输入我们这个密码,也就是这个密码。就是他。把这个拿过来,咱们登录,大家看是不是过来了啊,咱们一点来说啊,首先第一部分到了我刚才说的方法,得到你的用户名和密码,咱们往下执行,你看啊,Username password,然后得到之后把这个密码用户名封装成这个对象,封装对象之后我们调用这个方法开始进行认证,那咱们到这个方法中来进行认证,然后你看现在到方中来啊,咱直接跳到下边。然后认证的过程中,它里边会直接啊又委托这个方法进行认证,我们进入在这个方法中调了下一个方法,往下进行,就是查数据库,得到我们这个用户的信息,就是这个user details,得到之后往下来看,这里边给它捋退,然后咱回来啊,回来之后再往下看啊,在里边开始做这个就是。
12:25
我们说这个校验的过程啊,就是将你的用户名密码是否一致,你看现在啊,就到了这里面来做了校验,如果校验可以的话,那下面呢,他把这对象带给他回填到这个对象里面去,就这个atic里面去,然后最终把这对象放到咱们的上下文对象中去,Security content中去。所以你看啊,就是我刚才说的这个基本的过程,所以说以上咱就把这个用户认证的流程给大家做一个介绍,这是框架预定好的一个过程,大家把这过程一定要特别的清楚啊,然后我的课件中写的,其实就是刚才我说这个过程啊,我就不再读一遍了,因为把这过程给大家做说明,你在自己学习的时候,第一步你可以把这张图先给他总体看一遍,把图先看懂,然后再结合我刚才的方式,比如说你可以看到里边的源码,或者你加上底bug,然后进行执行,看他到底是怎么做到的。
13:26
所以以上啊,用户认证的流程,我们就先说到这里。
我来说两句