00:00
各位同学大家好,下面呢我们继续使用完成用户认证过程,刚才呢,我们编写了三个自定义组件,第一个我们封装了用户类,第二个编写的方法根据用户名进行查询,第三个编写的自定义的密码调验器,那下面呢,我们来编写里边的核心组件,首先我们写第一个就是登录的,在里边得到用户名和密码,然后调方法完成认证过程,最终返回token字符串,那下面啊把这个我们来写一下。怎么来实现呢?我们来看一下啊,首先在块中咱们创建一个这个,我起个名字就叫filter。把这个创建,然后创建之后呢,在里边我们来创建一个类,这个类我起个名字就叫token。捞个。There。类创建之后呢,咱们让他来继承一个类,这个类是什么呢?大家看这张图里边啊,我们在做过程中需要用到一个filter,叫username password authen filter,所以让他来继承这个filter,这个类我在里边写一下。
01:17
Username。Password authen filter,现在完成继承,完成继承之后在里边呢,来写上它的具体内容,咱们先写个结构,首先第一部分我们来写一下的构造方法,在构造中完成它的基本的信息设置,然后第二个呢,我们来写个方法,这个方法是重写这个附类中的方法,咱为了得到我们传过来的用户名和密码,然后调方法进行校验,就是咱们说的登录认证过程。我写一下啊,获取输入的用户名和密码,然后调用方法完成这个认证,然后调这个方法是我们里边给咱们封装好的方法,这方法叫K,通过它进行实现,咱刚才分析原理中也都提到了,然后之后呢,我们的下一个方法,当咱们认证成功,或者说你登录成功之后。
02:19
这里边会调用的一个方法,另外还一个方法,就是你认证失败会调用的方法,所以以上是我们要写的一个方法,那下面呢,咱们把方法先写出来啊,首先第一个就是里边这个构造。我们加上一个构造。Public token filter,然后在里边传一个参数,这个参数呢,就是我们里边的这个数叫,因为它里面有这个认证的方法,所以咱把它作为参数给它进去。我写一下啊,Alun。然后之后呢,有一个获取信息调方法,完成认证的这个过程,这个咱们就重写这个filter里面的这个方法,因为这个方法是完成认证这个过程啊,咱们把它我就直接复制一下啊,就这个方法。
03:14
就是他。把这个我们拿过来,里边的具体逻辑我们一会儿再进行实现,先把结构咱们先写出来。就是他啊这个。然后这个之后我们再来看啊,在这过程中,当咱们认证成功之后,咱们要调个方法,我先re和now啊,先让他报错,然后认证成功调哪个方法,咱们还是看到它这个负类种,大家找到里边的就是下一个方法,咱们往后来找啊,这里边没有,那我们找它的负类也就这个。把这个打开大家找到啊,在里边有一个认证成功,如果成功的话,那它调的就是里边的这个方法叫successful这个方法,所以咱们把这个方法在里边,我们来写一下认证成功它会掉的这个方法。
04:08
啊,咱们来做一个实现啊,我把它同样直接咱们复制过来。就是这部分啊,呃,方法比较长,咱都给它布置了完整一下。直接就是它啊。或者说你用工具快捷键直接生成,我这么写,为了各位看的更明确啊,你直接用那个快捷键直接生出来也一样的啊,我就带着各位都去找一下这些方法啊,这是认证成功它会掉的这个方法,这个我们就拿过来,然后之后再来看啊,如果说你认证失败它会掉里边的这个方法调unsuccessful,所以咱把它同样复制过来。这个方法啊,就是这个。我们拿到这里边。然后把格式咱们稍微调整一下。所以现在啊,把里边那个方法我们都创建出来了,然后创建之后在里边呢,我们来编写它的具体逻辑,或者说具体的实现,首先第一个我们看这个构造,这个构造里边我就从我的课件中直接咱们就复制了啊,大家看一下啊。
05:15
首先第一个设置它这个相关这个manager这个参数,然后提交方式啊,咱们就是比如说可以是别的方式,然后指定你的提交的登录的接口,包括方式,我们现在登录,比如这是我们那个登录的接口,包括里边用POS提交啊,这是第一个最些基础的设置,然后核心是后面啊,大家看第二个。第二个什么意思呢?其实第一个核心就是把这个对象传进来,咱们重点往后看,第二个里边来做这个认证,就是得到我们输入的用户名和密码,然后进行认证,这个得到方式有多种写法,我这里写一下啊,首先我在里边这么来做,咱们先个对象叫这个,然后有个方法。
06:06
应该叫read的这个value,通过它我们来通过流乐方式进行操作,因为咱们登录我们用的是一个对象,咱们看一下啊,到咱们的录接口里家看到咱们登录是这个log,以用式取一下啊,当然实际有多种方式啊,我就这么来做了,这里边通过这个get input加上log in vo.class。然后最终它会返回我们这个对象,就这个啊,咱把它得到就是得到当前那个用户名,包括密码这个信息。然后这里边有异常,咱就直接这个exception,或者说加个TRY啊,就加个try catch处理一下啊。现在这部分完成,然后完成之后下面我们怎么做呢?各位注意啊,因为咱这过程中我们需要用到里边的另外一个对象,就是刚才看源码中也看过了,在这里边我们找到啊,在这个username password这个filter里边,这过程中它会装好这么一个对象,用的是username password authentication,所以咱们同样用它进行实现,最终返回我们这个authentication这个对象。
07:29
我在里边写一下啊位置。第一部分。获取输入的那个。用户的这个信息,然后第二部分给它封装成我们那个对象啊,咱们封装一下啊,上一个username password authentication。里边这个token啊,不是是那个token。我们直接用这对象,然后new的对象过程中向里边传入我们的数据,通过VO,第一个是它的username,然后第二个是里边的password,最终返回我们这个对象。
08:11
就是啊,这对象我们用这个authentication。这个对象。这位置啊,给他写一下啊,这名字有点长,咱给它改到短一点啊。有这个。Authentication。OK啊,就叫它了啊,所以现在这个咱们完成,然后完成之后呢,下面怎么做呢。咱们之前讲过啊,下面咱们就是调用three中一个方法完成这个认证啊,那我们来调一下啊,咱就直接return。this.get authentic manager里面一个方法叫authentic入这个我们刚才分好这个对象,现在他就会调方法完成认证,认证流程咱都介绍过了,给大家知道我们目前写法,因为咱们目前是自定义里面的过程。
09:05
我这个再说一遍啊,这个方法我们作用就是得到我们输入的用户名和密码,然后封装成这个aluthen对象,再调用可中的方法把它传进去完成认证,所以现在这个就完成了,然后认证完成之后,我们下面进行处理,如果认证成功,执行这个方法,如果认证失败,执行下一个方法,那我们继续来写一下啊,然后往下来看。首先我们看这里,如果认证成功,大家想一下咱们需要做什么?做什么?我们是不是要生成token啊,那我写一下步骤啊,首先第一个获取到当前这个就是用户啊,或者当前用户这个对象,或者当前认证用户那个对象,然后获取之后我们第二部分成token字符串,第三步把它进行返回,这么做就可以了,那大来写一下啊,第一个把这个当前认证用户对象先得到通过里边的大家看啊,其实就是这个对象嘛。
10:11
我们这个名字,咱就叫这个aler啊ath。点上这个方法应该是他啊这个方法得到当前这个用户这个对象,我们就。默认是啊,咱给它做一个转换,因为之前我们应该是过有一个自定义那个对象,现在就要用上了啊,咱们叫custom。右侧啊,返回这个对象这个位置我们做一个强转。得到当前这个用户这个对象,然后得到之后,我们把它生成一个token字符串,咱之前有工具类直接生成一下啊,传入他的ID。然后那个用户名。我们得到一下啊,Get ID,这是第一个参数,然后第二个我们再得到一下。
11:04
点get user.get username,现在我们就生成一个token字符串,然后生成ton字符串之后咱们最后把它进行返回啊,那返回过程中我先给它放到一个map集合中啊,都是咱之前写过的啊,我就快速写一下map等于上一个。哈奇麦把依赖给他引住。然后之后呢,向map中放我们的token,这个值是这个token啊,注意这个名字啊,不要写错,我们是ton,然后最终进行返回,返回过程中注意啊,因为现在我们这里边的不是在那个control里边,咱们用那个就是request controller,所以咱们现在需要我们用。原生的方式给它返回,那怎么返回呢?我这里边呢,给大家写好一个工具类。咱们找一下就这个你看啊,通过里面这个response原生方式把它返回可以了,所以现在啊,我把这工具类咱们给它写过来,为了一会儿我们返回进行使用,我就直接复制一下啊。
12:13
咱们就在这个。Common里边加上这个工具类,我们找到一个result,在里边把这个类进行创建,把里边的内容我从课件中就直接复制了,啊,就是这么一段内容。咱们啊,直接拿过来。也为了进行返回。啊,大家看啊,这个应该就可以了啊。就是这么一个基本的结构啊。然后这个之后我们再回来啊,回到刚才这个token中,在这个地方我们完成返回,调用response。就刚才那工具类中啊,注意别导错包是咱们里边的啊,有一个方法叫out,然后传入response,第二个传入我们那个map那部分我们通过。
13:10
result.ok里边加上一个map,因为咱看这工具类中啊,咱们也看一下。它这个里边呢,通过response get write,然后把你的数据最终进行返回,然后它转成了啊,就相关这个结构。最终完成我们这个操作,就是咱们原生方式做到,因为它不是CTRL一遍啊,所以现在认证成功咱们就完成了,然后完成之后我们再来看啊,当我们认证失败,咱们同样给他也是返些信息,那这个我们就直接返回一下啊。Response,点上out,传入response,然后再加上我们这个结果,我们就加上这个result,点上这个,咱就加上这么一个file了啊,或者说我们可以自己自定义啊,咱就加上一个。
14:05
然后通过它进行返回就可以了,然后这么返回呢,其实它提示还是咱之前那个失败,咱为了写的更明确,我把这个稍微给他补充一下,怎么补充,大家注意啊,这个方法,然后在里边我们加过一个枚举类,枚举类中呢,之前只加了两个,一个是200成功,一个叫201失败,那我现在给他再来加一个。比如我起个名字啊,就叫做这个log in。Idol。在里边加入两个,第一个状态码,我随便写一个,比如我写这个叫204了啊,然后第二个加上一个提示,就是这个认证失败,把这个加上,然后在里边我们用这个枚举类,就是里边的log in a啊,就给它做一个进一步完善,你加file也没有错啊,就是咱写的更完整点,然后我加上。点上一个build,第一个几个呢?第二个加上我们这个枚举类中的这个log in a啊,咱反映这个认证失败,所以现在啊,大家看这个类我们就完成了,就完成了登录的认证。
15:17
我把这过程啊给各位再重复一遍,然后咱们再继续往下来写,首先我们的做法就是咱们写了一个filter,让它继承了username password authentication filter,首先在构造中作用就是传入咱们这个参数,因为它里边能完成认证,有那个认证方法,然后第二部分我们得到输入的用户名和密码,然后调用这个方法进行认证,这过程中给它分成这个alun这个对象。是咱们做了一个定义的过程之后,我们的第三部分,当你认证成功,我们把这个用户信息得到,根据它生成文字符串返回,如果认证失败,返回他的失败的信息,所以现在啊,咱就完成了认证的这个filter,这位给能写出来,就是把它做一个结合咱们项目实际进行了自定义。
16:13
然后这个之后我们继续来看啊,当咱们认证或者登录过滤器完成之后,下面咱要做一个解析token的组件,就是判断我的头里边是否有token,如果有的话认证完成,没有的话,那表示认证失败啊,就是做一个解析的过程,或者说的通俗点就是判断当前是否是登录,那咱们下面继续来写一下啊这个过程。然后怎么做,我这里做个实现,然们现在啊,在刚才这个模块的filter包里边,我现在再来创建一个类,这个类我们找到课件中跟它的名字保持一致,我们叫token a filter做这个解析过程。然后让这个类呢,一个类啊,就这个类,我把它拿过来啊。
17:02
一个。Ones for request filter,呃,做一个继承,继承之后我们实现里边的就是相关的这些方法啊,就里边有一个do filter。No的这个方法,在方法中写它的具体过程,那这过程我就从里边复制了啊,因为过程是比较固定一个流程,咱们拿过来。这个线复制过来啊。然后咱们说一下它里边的详细的过程啊。我把这参数先拿过来啊,它里边有这么几个参数,大家看啊,Request请求,Response响应,还有这个filter,就是咱说那个过滤列那个对象啊,这个名字稍微改一下啊,第一个request。第二个response。第三个我们叫这个。然后大家看这个结构啊,首先第一部分就是你可以理解为我现在要进行各个接口的访问,它会执行到我们这个过滤器中,在过滤器里边呢,首先我们做了一个判断,如果说你是登录,就是登录的时候呢,不需要做认证的判断,因为登录我们之前肯定还没有这个权限,就是不能还没有做这个操作,所以登录给他就直接放行,如果说你不是登录,那咱再继续往下来做,那怎么做大家看啊,在这里边我们做法就是。
18:27
首先我们先得到当前这个用户,看用户是否已经做了登录,在这里边一会儿我会写个方法在里边判断你的请求头里边有没有那个信息,最终返回就是咱们这个对象,Username password aluthen ton,如果它的值不等于空,那咱把这对象就放到咱们的上下文对象中,这之前应该说过啊,Security contact,类似于我们JA web中那个contact,如果说等于空,那就表示失败,咱就直接给它返回这个错误信息,就是刚才我们写这个工具类啊,把这个我们给它。
19:06
加上啊,这工艺类中用到咱刚才说那个枚举。这个枚举就是它log in a,所以现在啊,这是一个基本的过程,我在重复一遍啊,就是我们刚才写这个组件中,第一个组件是完成那个认证过程,然后目前组件是判断你是否完成认证,就是咱们每个请求都判断一下当前是否进行登录,说到通点就是判断是否有登录,你没有登录肯定不能操作,但是登录判断的时候,我们一个原则,你登录本身接口肯定不需要判断,只有登录之后才判断,所以这个登录接口咱直接放行,如果不是登录,那咱们在方法中就判断,判断的依据就是请求头里边有没有偷N,有的话是登录,没有的话就不是登录,然后最终如果是登录,把这个对象放到咱们的上下文对象中去就可以了,如果说等于空,不是登录直接返回错误信息啊,这是我们看到的啊。
20:11
然后下面呢,我们把这个方法咱们来写一下,这个方法就是判断这个请求图里边有没有信息的过程,那咱们来写一下啊。然后这个怎么做呢,我写下边。啊,就是请求头里边是否有这个token,那咱们往下来写啊,Request点上get title加上token。返回的是一个token字符串,这个时候咱们下面进行判断。加到这里啊判断。然后咱们加上。死罪。S。稍等啊,词缀us啊,这个写对了啊,点上意empty加上token,如果说这个token池呢,它不等于空,那表示当前就是登录,如果它是登录的话,那咱们从里边把它的信息得到,我们用j wt helper ID。
21:26
然后取到之后,下面我们再进一步处理啊,这个过程中咱们也做个判断啊,就是加上if,如果说从token里边能到这个用户名。就是user侧内加上啊,如果它这值不等于空,那咱就完成最终的封装,给它进行返回,那最终我就re一下啊。上一个username password,一个aluthen token里边传入我们的相关的信息啊,包括我们的userme,第二个没第三个这个。
22:06
Collection。点上阿姆list啊,所以现在啊,咱把这个就完成了编写。以上啊,是咱们完成的第二个重要的组件。最终啊,给他存一个钠。这样的话就可以了。所以以上大家看我这张图里边啊,咱现在把核心部分中的第一个和第二个都做到了,最后带着各位再来看一遍啊,这两个做的是什么?首先第一个就是token in filterr,我们在里边做的事情就是你可以理解为得到输入的用户名和密码,把它封装成框架,要求这个对象,然后调用这个方法完成认证,认证成功调这个方法,认证失败掉它,如果认证成功,咱们生成to k。就是这个流程,然后第二个就是判断认证,这个解析过程就是判断我当前是否已经完成认证,然后咱们的做法就是在这个里边大家看啊,我们首先就是从请求头里边得到这个用户名称,如果说得不到,那就认证失败,如果得到的话,包装成我们要求对象,然后最终放到我们的上下文对象中表示目前认证就可以了,咱们就可以继续往下进行,如果说你当天登录,那你登录的接口不需要判断,直接放行就可以实现。
23:31
以上啊,就是这两个核心部分,然后这两完成之后,咱们还有第三部分,我们需要在这个里边这个配置中,把它的相关的认证部分在里边完成最终配置。
我来说两句