00:00
拦截器的功能呢,咱们刚才已经分析过了,咱们要做的就是这个,呃接森这个哎日志哎结构的或者这个格式的一个校验,对吧?啊啊,那现在我们先写一个拦截器啊呃,建一个M项目啊L咱们起个名字啊,就叫做这个吧啊flow咱们是零六,然后杠诶二幺。啊杠0621,然后往下走啊,咱们起个名字叫做诶com,点艾特硅谷啊,点击finish。然后点击啊,这个这window。嗯,OK,那这个完之后呢,那接下来我们开始去写咱们这个拦截器啊,那写辅助拦截器咱们需要首先要干啥呀?呃,需要先引入这个相应的依赖啊来咱们去引一个依赖,好,那找到辅助拦截器找到依赖,那我们在这儿呢,这个依赖引的东西还比较多啊,来这么多CTRLC先粘过来,粘来之后呢,先放下来,我再给大家解释里边的东西啊来我们先刷新一下这个没有让它加载好,那现在我们先看上边俩。
01:04
上面俩是什么?是底喷的says对吧?一个是我们flu的一个呃,NG啊,然后呢,一个扣,呃,这是我们写燃截器必须得用的一个依赖,那下边这个是啥呢?是呃,咱们引用了一个这个杰森的一个解析工具啊是呃,阿里的这个fast杰森对吧?啊发当然当然也可以引用其他的啊行,那咱们引用这个依赖的目的是什么呀?是不是就是通过他去校验咱们那个杰森文件呀,啊,杰森杰森那个日志啊,通过他去校验,所以演了一个这玩意儿啊,好让大家注意观察一个细节。啊,咱们的flo这个依赖咱们这个scope写的是啥,是provided啊provided咱们这个scope呢,是不是还有一些其他的,比如什么runtime啊这等等其他的一些这个值对吧?咱们这设的是provide啊,这个为什么要设成provide的,一会给大家解释啊好,那接着往下走,下边咱们这还有什么,还有一个build build里面放的是什么?全是plugins,是插件啊,全是插件,那咱们这插件有什么呢?啊,首先第一个这有一个ma。
02:07
编译的一个插件对吧,Ma com是一个编译插件,那这里边我们其实主要指定了一个什么东西啊,指定了一个咱们这个JDK的版本啊,就是1.8啊1.8哎,当然大家如果说在那个嗯,咱们的那个main问的那个那个自己的配置文件当中,如果说呃,声明了咱们JDK的版本是1.8了,那这个参数其实你不加也行啊,就是这个插件不加也行啊,那加上它肯定保证没问题,因为咱们ma里边那个JDK版本默认多少啊。默认是1.5啊,默认1.5啊,所以有时候可能是不是1.8里边有一些新特性,它是不支持的呀,对不对,比如说咱们那个,呃,泛型的简写啊,或者是咱们那个什么拉姆的表达式对不对,你1.5没有1.8才有新特性嘛,啊,所以咱们这给他写1.8肯定没问题啊好接下来看下一个。下一个插件呢,咱们是一个ma asembly plug asemble是什么意思,是组装的意思啊,组装的意思啊,这个其实呃,这个插件什么时候用的比较多,假如说你这一个项目当中一个product当中,我有很多的这个。
03:11
Mo啊model,那这时候咱们用这个组件其实是比较方便的啊,就是它可以去灵活的去配置你最终这个包里边有哪些模块或者有哪些组件,诶是灵活配置的啊,默认情况下呢,它是会把你这里边所有的这个模块里边的所有代码全部都包含在最终的包里边的,这是默认情况下啊,默认情况下啊啊这是这个插件的这个作用啊行,那接下来给大家解释一下,咱们上边诶这个东西诶为什么要设成这个provided,然后它为什么没有被设成provided。啊,给大家解释一下,大家想一想啊,那我们现在这个项目当中,一会儿咱们是不是得自己去在src里边去写一些代码对不对,然后呢,咱们这个项目当中还引入了一些依赖,这依赖有俩,一个是flu的,一个是这个fast杰森的,对不对啊,那大家想想啊,你说我最终这个包里边,咱们期望它包含的这个依赖,或者包含的那个呃,Class文件应该有谁呀,都首先自己写的,肯定得包含在最终的包里,对不对?那这俩依赖一个是呃flu啊,一个是范杰森,你说他俩哎应该怎么处置呢?Fast杰森我们这个诶必须得在里边,为什么啊,因因为咱们是不是在那个一会咱们这个这个包打完之后要放在哪啊,说要放到辅录的立目录下,对吧?那辅录利目录下有这个发的阶层嘛,没有,那所以咱们必须得带着,那关于这个呢,这个辅助门基扣呢。
04:40
它在的力录下是不是肯定有啊,对,不肯定有,那所以说最终的包里我就不需要来包含它了,那所以说咱们就把这个东西呢,给它设成了provided,什么叫provided,就是提供,什么时候提供,就是我最终部署到集群的时候,已经给我把这个依赖提供好了,相当于对不对,那咱们现在是不是就这种情况啊,因为live下已经有这个依赖了,那所以说咱们这个相对给它设成provide的啊,也就是说我一会再去编译的时候,我是有这个东西的,但是最终打到包里是没有它的啊,是这样的啊,那所以说咱们需要给这个设成provide,好,咱们把这个解释完了啊,接下来我们去写一下咱们这个代码啊。
05:19
来咱们开始写,来我们点击这个哎,New class,那我们现在先写一个这个拦截器啊,咱们叫做哎,Log intercept啊那这个福录,诶咱们没写这个包名对吧,那我们起个包名啊,咱们叫做com.at,诶硅谷点哎,我们叫机贸啊这个机贸呢,就是咱们一个呃,电商系统的一个名字啊这个鼓励微鼓励这个商城嘛,现在是咱们这个无所谓啊机贸,然后点来一个什么东西呢,来一个诶然后点in cer intercept,然后后边的来一个诶,Log in cer log,诶咱们现在要要建的是啥,是包对吧?啊那是包,那包我就重新建吧,右建有一个这个拍个没事,我手速快啊硅谷,然后来一个这个呃,Flu,然后后边呢来一个in,丢了个几O对吧,来tal,然后点这个flu.in。
06:20
啊,然后点就完事了啊,然后我们把下边这个类给它拖到这个包里啊,然后reflect好了,现在有包名了,行,那现在我们就开始写拦截器了啊,写辅助拦截器,首先我们需要先实现一个接口,对吧?哎叫做什么?就叫做intercept,咱们找到那个,哎完了之后呢,我需要去实现里边的几个方法,好你一是赖咱们在这不用实现,咱们重点是不是实现它俩就行了呀,对他俩,那它俩的逻辑应该是一样的啊,那所以我们现在先实现第一个,然后再实现第二个来实现第一个。咱们这的功能是什么?我们的功能就是要去是不是要校验咱们这个这个杰森的格式啊对吧,那要想校验,那咱是不是先得得到这个杰才形对,那怎么得到是不是以问点get下get get body对吧?那body get完之后,咱们得到的是一个哎这个字行数组,咱们需要先怎么办?先转成字符串对吧,那用一个诶SP啊然后呢,把这个body放进来,咱们指明一个这个呃字符编码吧,咱们指定那个UTF8啊然后呢,我这个呃叉set,诶叉诶site,然后呢,然后点咱们有一个four name哎,Fourna什么东西呢,咱们哎UT啊然后F,然后杠八啊OK,那这个相当于我们controlrl v,我们就能得到一个这个诶相当是一个log字符串,哎,他报错了对吧,这个报错小写不是小写。
07:47
呃,啊,我这个水润这个包是不是导错了,对不对,不是这个啊哎,行,这个可以了,现在可以了啊,现在可以了,然后这样呢,它变黄了,变黄了说明这个代码可以优化一下对吧?那怎么优化,那直接提示就行了,这个out enter啊然后呢,让咱们replace一下对吧?这replace一下,然后呢,看看它底层是啥,底层是不是还是这个呀?啊其实没啥区别了,行,那就这样就行了,咱们得到这个哎,Log了,那得到log之后,那咱们接下来就可以开始校验了啊那校验的话怎么校验呢?
08:18
啊,怎么调研说咱们导了一个fast杰森呀,对不对,那fast杰S当中我们有一个这样的方法,大家可以看一下啊,有一个杰森点pass接点pass,看是不是在解析这个日志啊,对不对啊,相当于这个相当于什么,你给这个函数,哎,里边传一个字符串,它会把这个字符串解析成一个什么东西,结成一个阶森对象,对吧?一个阶森对象啊,那如果说你传的字符串它不是一个阶森,那是不是解析阶森对,结成阶森对象的过程当中肯定会出问题啊。对不对,那所以说咱们就利用哎这个机制啊,咱们去给它进行一个啊这个解析啊,进行一个解析,也就是说我们这儿呢,诶使用这个东西啊来。使用g son,然后点诶PS part这样的一个方法,咱把log给它放进来,如果说这个log是一个标准的接S,那这个代码是不是不会出现任何的这个报错信息啊,那如果说你不是一个标准的阶S,那这边他肯定会怎么样。
09:15
可能会抛抛异常啊,解析失败对吧?那所以说咱们这儿呢,就得怎么做,我们就得呃用这个特性去做一下,那当然咱们这儿最好怎么做呢?写一个这个小工具类啊,然后呢,这个代码会更方便来扩展一些啊,咱们写一个工具类,咱们叫做g son jn u ual,然后呢,这个回车,呃然后咱们在这里边呢,写一个静态方法啊,咱们呢,叫做public,然后sta,呃,我们叫什么叫做validate杰森吧,Vali va date g son,然后呢,我们呃来一个这个,那它的返回值应该是什么类型啊,应该是布尔类型的对吧?因为咱们解析它是否合格,那就是呃返回事后否嘛,那这里边咱们来一个参数叫做string log吧啊s log啊啊,那在这里边我们就得去,哎,声明咱们的这个逻辑了啊,那因为它它是这样一个特点啊,就是说呃,我爆错,呃或者我泡异常,那就是哎非法的腹泡异常,那就是正常。
10:15
行的,那所以咱可以这么写,可以用这个try catch去写一下,对吧?来咱们TRY来下边来一个catch啊,来后边我们来一个这样的一个东西,那踹的话,那咱们就得踹谁,是不是就踹那个杰森点pass就行了,Pass咱们往里边呢,传这个log啊,那如果说正常情况下不报错,那这个代码接着往下走,那咱们就return出啊,Return出那接下来如果说我抛,呃这个异常,抛异常是不是咱这能catch到啊对不对,那catch的话,那咱们catch什么异常呢?这个咱们可以自己去做一个测试啊,就是说你给他传一个乱七八糟的东西啊,你看他抛什么异常对不对,那咱咱这就不测了啊,他会抛一个JA森exception,那咱们把这个CTRLC复制过来啊,放到我们代码当中啊,如果抛这个异常,那说明呢,它解析是有问题的啊,那这时候呢,我们就reta一个,诶false就行了啊false啊,那这个小工具咱们就写完了,完之后呢,我们回到咱们的拦截器的这个代码当中了,那这时候我们就可以做判断了啊来。
11:15
嗯。If啊,咱们调用那个杰森哎U当中的这个,哎方法g son u哎到哪去了,G son,哎,U啊,然后点va杰森啊叫杰森把log拉进来啊,如果说你返回的是true,那我这怎么办,我返回上。我就哎谁呀。是不是return就行了,对不对,因为你是合格的嘛,我就return你,那否则的话呢,EL else要算到我return上,那我就return。闹是不是就行了呀,因为因为你相当于是怎么下边是不是就不要了呀,相当于你是非法的,非法的我就相当于给你闹,那就相当于是过滤掉了呗,对不对,那其实咱们逻辑就写完了啊,就是这么简单啊,很简单的一个小逻辑啊,那接下来咱们再按照相同的逻辑去实现一下下边这个方法就行了,那实际上咱们正常情况是不是用下边去调用上边的方法就行了呀,对不对,那咱这怎么写啊,怎么写,那咱们这进来了一个例子的啊,那我需要对它进行一个呃便例对吧?啊进行便例,那然后呢,怎么去判断这个疑问它是否合法呀。
12:22
是不是可以调用上面这个啊,调用上面那个,那调用上面这个,那相当于是呃调用它,然后传个疑问的,那它是不是会返回疑问的,或者是no啊,就那可以怎么做,那就根据他是不是闹啊,如果是闹那就说明啊他非法非法咱们怎么办啊。是不是应该把它从这个集合当中给它去掉啊,对不对,诶但是从这这种这种增强for循环里边,咱们循环的过程能去除元素吗?去不了对吧,那去不了怎么办。哎,咱们可以用那个哎,Itator对吧?啊用那个迭代器是不是可以啊对吧,那咱们用用迭迭代器,那我现在需要怎么办呢?需要哎那个呃咱们需要怎么办啊啊需要new一个那个对吧?来我们来一个啊应该是我们呃调用那个Li呃list呃咱们怎么怎么怎么怎么整一个来着,我突然那个脑子抽了啊,我看一下那个文档啊。
13:17
咱们得到一个迭代器啊。咱们能不得到,是不是咱们直接呃用list点,然后调用方法就能得到一个迭代器啊对吧,咱们这么拿一下啊,来我们list点哎,调用这个it哎,这个方法我们就能得到这个呃,集合的一个这个迭代器啊,那得到它之后呢,那怎么去使用它进行遍历啊啊应该是where e啊,然后it.has nest啊,然后下边走啊,如果这个接下来下边怎么办啊。那是不是就获取的N呀,对吧,那么就is瑞点哎这个N,那它得到就是一个相当于一个event对不对,那这时候我们就得去进行这个来判断了啊进行判断了,哎,如果说啊说说什么呀,如果说哎我调用上边那个intercept的方法啊,然后把next传进去,如果说我传我返回去是什么呀,是no啊是no的话,那我就怎么我一定要用点啊是remove就行了呀,对不对啊是这样,那这样一来咱是不是就相当于能把那个no给过滤掉啊,那最终返回什么,最终不还是返回这个例子的呀?啊对不对,哎大家看一下咱这儿是不是也爆黄了呀,爆黄还是说明可以优化,你看这儿可以写成什么呀。
14:40
是不栏目表达式就行了,对不对,看不懂了是吧?啊没关系啊,后边盖全是这种啊对,全是这种栏目表达式啊,啊这个写法跟刚才咱们的效果是一样的啊,这个看不懂也无所谓,你不用它就行了呗,啊好,那这个相当于我们就完成了这两个方法的实现了,那接下来我们现在只剩下啊最后一步了,只量最后一步了啊哪一步就是咱们那个builder对不对,这个别忘了啊,完了咱们时间可能不够了啊,我们把这个拦截器写好啊,然后呢,测试咱们明天再测吧,啊来,我们把这个builder写一下builder,然后呢,我们需要public,然后呢,Select啊,然后来一个class,咱们叫做BDR,后边呢,咱们需要implement intercept,哎,当中的这个builder啊,这个build完了之后呢,咱们需要去实现里边的两个方法。
15:30
哎,走你一个build的方法,一个是con figure方法,Build的方法咱们这很简单,Return一个拦截其对象就行了,对吧,那下面这个呢。你你是不是就是假如说你在配置文件当中啊,你需要给拦截器传参,那在这儿是不是可以获取配置文件里边的参数啊,对不对,怎么获取,那就contactt点是不是可以各种get呀,对不对啊这个咱们就嗯不演示了,因为咱们没用,那这边我们直接诶你有一个啊builder,就你有一个什么东西拦截器就行啊咱们叫做诶log s啊那到这呢,拦截器咱们就相当于写完了啊写完了好,那现在我们把这个诶包打一下啊,咱们打开这个没文插件,找到life circle,咱们点击这个诶package双击。
16:14
啊,然后咱们学校打个包。然后咱们打完包之后呢,会出现两个包啊,然后给大家一会儿去看一下。已经打完了,打完之后咱们找到左边那个target里边呢,我们出现了两个包,然后大家来看一下啊,咱们一个包是这个啊,一个包是这个啊,那它俩有什么区别啊,上边那个包是我们这个idea当中这个ma自带的一个打包套件,它里边只包含什么呀?只包含咱们自己写的源代码啊,指包我们自写的这个这个class文件啊,指包自己写的啊,然后下边这个呢,下边这个是我们自己给他配的那个打包插件啊,他给打出来的包啊,那个打包插件它默认是不是会包含所有的东西啊,对不对,但是咱们有一个依赖,是不是设成provide的模式了呀,对吧?那也就是说这里边实际上它包含那个是啥?应该一个是我们自己写的,还有一个是那个放在阶词,所以咱们应该用谁应该用下边这个啊CTRLC,诶给它拿过来放到我们这个桌面上啊CTRL啊,那咱们一会要做的就是把这个上传到辅助的立功录啊,然后呢,是不是就可以进行这个测试了呀,咱们没有时间了啊,我们就不测了,我们把这个。
17:24
呃,配置文件给他补全啊,咱们需要一个哎,全类名,然后大家要注意全类名咱们应该写谁的,全列名是这个吗。是这个拦截器吗?不是应该是谁,应该是这个builder啊,然后右键咱们copy还reference,然后呢,放在这个位置controlr,喂,然后大家注意得改一个地方吧,R改是不是这得改一下,得改成Dollar浮啊到诶诶不是人民币啊是Dollar到好那到这为止,我们这个配置文件呢,相当于就诶写完了啊写完了然后呢,我们把这个视频录一下。
我来说两句