00:00
好,那我们当前咱们的拦截器已经创建完了,那我们怎么让咱们当前的拦截器来实现功能呢?来大家看好,首先咱们来找到我们SPAVC的配置文件,大家看咱们最早的时候,这里面是不是就加了俩标签就能实现效果呀,一个扫描组件,然后一个视图解析器,你看现在咱们往里面加的啊,这是视图控制器,然后这个是什么?默认的solve Fla,然后这个是咱们的spring VC的注解驱动,然后这个是咱们的文件上传解析器,对不对?然后下面咱们还要再配置,就是咱们的拦截器,然后咱们一会儿再讲异常处理器的时候,还要再配置一个叫异常处理器,能听懂吧,所以说咱们原来讲过spring VC里面是不是它的插件是可插拔的对不对?你用了就插进去,你不用了就拔出来,对不对,其实就是这个意思,你用了你就配置上去,你不用的话,那咱们不配置就完事了,再说你配置上去。
01:00
有问题没有啊,没有问题能听懂吧,啊这样的啊,好,然后再往下大家看好,那怎么来进行配置呢。双眼镜配置呢?看好来咱们先写个注释对吧?然后这个叫做配置拦截器,OK,好然后用什么标签呢?MVC冒号intercepts能看懂吗?MVC冒号intercepts然后既然大家看这是一个复数标签,那里面就可以来写多个单数标签对不对?好但是呢,这里面一共有三个标签,咱们一个一个的去讲,大家注意这俩是一样的,知道不?这两个是一样的啊好然后大家看你看这第一个BB大家学过没有啊,学过吧?这一个B代表的是不是就是咱们IOC中的一个组建一个对象,大家说对不对?所以说我们现在呢,咱们把并给配置到了咱们的MVC冒号intercepts里面来表示什么?表示我们当前咱们的某一个类型的对象。
02:10
它就是一个拦截器,能听懂不?所以说咱们只需要在这干嘛,加上一个class,把咱们的first intercept往这一放,OK,当前的拦截器就配置完了,能听懂不能听懂吧,非常简单,当前的拦截器就配置完了,就那我们当前的拦截器是谁?就是我们当前的first intercept所对应的对象能听懂吧?哎,好,就是这样的啊,好,OK,来,咱们下面来重新部署,那这东西也看不出来啊,那咱们就输出一句话吧,行不行?So,咱们在这来输出这个first intercept,然后pre handle方法,能看懂吧,来复制一下,然后这个是咱们的post handle来复制一下,然后这个应该是咱们的after completion,能看懂吗?好啊,行来。
03:07
重新部署有效果没有呢?咱们来看啊。首先咱们先来清空一下,不要影响咱们的观察,好大家看我现在呢,然后我来访问一下咱们的首页,大家看,好来点击首页,大家看,诶输出了没有,输出了李川老师,这是控制器方法吗?咱们也没有在咱们的控制器方法里面来写这个斜线呢,我们在这访问的是不是就是一个斜线,对不对,是不是啊,对吧?好,但是大家注意,我问大家,我们访问斜线能够访问到咱们的index里,大家说来看看看咱们的配置文件里面是由谁决定的,是不是由我们写的view controller决定的,大家说对不对,那在这之前我们是不是需要通过一个控制器方法来处理这个问题,大家说对不对?所以说这个东西在进行处理的时候,跟我们平常咱们自己写的控制器方法处理的过程一样,不一样啊一样,所以说这个东西它也是有相对应的控制器。
04:13
方法来执行的,能听懂吧,就相当于我们原来所写的request mapping,括号是斜线,然后有一个方法,然后return的一个index,能听懂吧,所以说呢,大家注意,我们当前的这个东西也是会被我们的过拦截器进行拦截的,OK吧,好,但是问题来了,你看咋啦,只有这一个方法输出了对不对?咱们的后边那两个方法输出了没有没有对吧?然后而且咱们的页面里面来显示首页跟咱们的超链接了吗?没有,那这是为啥呢?大家想啊,因为拦截器,拦截器,那它是不是就有两种操作,一种是拦截,一种是放行,对不对?那什么是拦截,什么是放行呢?在咱们的过滤器里面有一个叫做filter Cha,指的是过滤器链,对不对,对吧?然后呢,其中就有个do filter方法,然后是来调用下一个过滤器的。
05:13
Do filter方法,那既然要调用下一个过滤器的do filter方法,那不就是说咱们当前这个过滤器已经过滤完了,要放行吗?大家说对不对?所以说咱们那个什么future change do filter就是放行的意思,这个大家都知道吧,好,但是那咱们的拦截器,那很明显现在咱们没有访问到咱们的控制器方法,如果访问到这里边应该是首页,还有超链接,对不对?那为啥呢?那就说明被拦截了呗,对吧?那哪是拦截呢?咱们也没看出来呀,那大家有没有发现,你看这个,那你大家说这个要想被拦截,要想拦截我们的控制器方法的执行,它一定是在哪呢?大家想想。
06:00
一定是在哪呢?你哪能拦得住呀啊,Pre handle还是post handle还是咱们的after comple post个屁呀,都在哪执行的啊,都在哪执行的?来,你告诉我pray handle是在咱们的控制器方法执行之前执行的,对吧?然后呢,咱们的这个什么,我们当前的post handle是在咱们的控制器方法之后执行的,然后还有一个就是我们的after comp是在渲染视图完毕后执行的,对不对?你告诉我这个这这三个方法哪个能拦截啊,哪个能拦截啊,那只有pre handle了,你post handle都执行完了,那你post handle里面你执行的时候,咱们的控制器方法是不是就已经执行完了呀?那你那还叫拦截吗?叫。
07:00
傲叫,那不叫拦截,那叫马后炮是不是是吧?好,所以说然后哪个应该是表示咱们的这个拦截的pray handle,大家发现没有,这个方法有返回值,但是这两个方法是不是都没有返回值呀?好,那这个方法返回值不玩类型,然后就是啥意思啊,就是我们当前咱们是否进行放行,好然后返回false表示拦截,然后返回处表示放行,能听懂吧?好,刚才大家应该就是我让大家看了一下咱们的这个源码是不是啊,Diss dispart of that在哪呢?Dispatch,然后solve that是不是在这呢,对吧。来看啊,往上走1061行。
08:02
看这。这上面这是不是handle啊,看看,看到没看好啊,我点进去,点进去之后大家会发现咱们的拦截器有多高,因为这是一个intercept list,看到了没?然后去执行的时候,然后干啥呢?如果咱们去调用每一个拦截器的pre handle,好,然后这个时候它咋的了?如果说这个时候大家说这个是返回处的时候还还会执行,还是返回false的时候会执行啊,是不是返回false的时候是不是会执行我们当前if里边的内容对不对,好看好,如果咱们的pre handle返回的是false,那我们当前的这个方法返回的是不是也是false,大家说对不对,对吧?好,那如果说这个方法返回的是false,那我们当前这里面返回的就是false,因为我刚才是点这。
09:04
它点进去的,知道吧,知道吧,好,那这个方法返回的就是false,那非false,这是不是就是true呀?那如果这是处,大家来看,直接return,你说下边这些东西还会执行吗?会不会不会能看懂吧,能看懂不?哎,好啊,选这个大家要注意啊,所以说咱们的哪个方法是拦截啊,Pre handle方法拦截返回false是拦截还是返回处是拦截啊,返回false是拦截啊好在这儿,那咱们就把它给改成是处,那其实大家也能够看出来,我们当前的拦截器起作用了,没有起作用了,所以说我们要想让它有作用,咱们必须得在spring VC的配置文件中来进行配置,能听懂吧,它好配置不好,好配置啊,行吧,来大家看好,我现在再来刷新,来大家看好使不好使,来,咱们把它拉到最后,大家看啊,这是after completion,然后哎呀,算了吧,再来一次吧,行不行。
10:04
啊好,再来一个刷新,大家看pre handle post handle after completion能看懂吗?哎,好啊,行,这就是我们当前的这个拦截器,那当然呢,这是咱们拦截器的第一种配置方式,然后下面呢,我再给大家来写两种,好,然后但是大家看好了,你看我当前我这样去配置的话,我们刚才访问首页是不是输出了这三句话呀,对不对?好,然后我现在再来点击测试拦截器,这个大家知道对应的是哪不,我的test control里面是不是写了一个request map,是不是叫test intercept,大家看来我点击这个超链接访问的是不是应该是这个控制器方法,能看懂吗?好,OK,我点击之后,然后大家再看看这个地方有没有,有没有,是不是也有啊,那所以说大家会发现什么,大家会发现我们当前。
11:01
然后呢,这个如果我们所使用的是这种方式来配置的话,咱们所有的请求是不是都会被进行拦截,对不对,是不是啊,咱们所有的请求都会被进行拦截啊,比如说咱们来写一个简单一点的啊,大家看好,你大家看啊,我在我当前的这一个test controller里面,我在这给它加上一个星星,大家说好使不。还知道什么意思不?咱们原来是不是学过ant风格的路径,一个问号来表示一个字符,一个星号表示一个或多个字符,星星来表示一层或多层目录,能听懂吧?那咱们有了这个请求,我们就可以来测试,咱们是不是就可以来发送多个请求了,对不对,有了这个请求映射,我们就可以来测试多个请求了啊来,下边咱们再来重新部署,大家来看一下啊好来,咱们来看一下咱们的其他请求会被这个拦截器进行拦截,不会啊,好OK,然后我们现在咱们来把浏览器给打开,然后咱们来刷新,大家看好使不好使,拦截了吧,点击之后大家看拦截了没,拦截了咱们在这再写A斜线可不可以啊,可以一个回车,大家再来看来拦截了没,拦截了,再往里面加斜线A,再来大家看拦截了没拦截了,所以说大家。
12:29
注意,如果我们只配置一个bin的方式来配置拦截器,那当前的拦截器是对我们所有的请求进行拦截,能听懂吧,能听懂吧,哎,对所有请求进行拦截啊好,那再往下,那咱们有这种方式,大家有没有见刚才还有个ref标签,看到了没?Ref是啥意思?Ref是不是可以引用当前IOC容器中的某个病的ID,大家说是不是对吧?好,那所以说咱们在这儿可不可以来引用某一个拦截器的ID,拦截器病的ID可不可以啊,可以吧,你看这儿有一个B,但是呢,那咱们访问不了,为啥访问不了呢?因为我们当前咱们有没有把我们的这个拦截器交给咱们的IOC容器管理啊,没有,那大家看我可不可以这样,咱们通过标识组件的方式,然后将它标识为一个B,可不可以,可以吧。
13:29
用啥?这是控制层组件吗?不是,这是业务层吗?不是,是持久层吗?不是,那是啥普通组件,普通组件comp能看懂吧,能看懂吧,好OK啊行,那光加这个行不行,不行,是不是还得扫描呢?那怎么扫描呢?你看咱们上面咱们在扫描的时候,咱们是不是只扫描了谁呀?CTRL,那咱们就直接扫描个大包不就完事了吗?是不是啊好OK,来再往下大家看好那在这咱们B你看你随你重新开始写它就有了啊B然后等于first intercept有没有就有了,刚才有没有,刚才没有啊行,然后咱们把这个写完之后,下面咱们再来进行配置,来大家来看啊好,然后这个时候大家会发现它跟咱们上面的这种配置方式一样不一样一样,因为当我们只设置它的。
14:29
咱们没有办法去设置咱们的拦截规则,能听懂不,它就是一个病,你把病设置进去,拦截器就有效果了,但是咱们大家都知道,这B里面你能设置拦截规则吗?设置不了,因为这就是一个B嘛,对不对,这个咱们也设置不了,所以说这两种方式都默认对所有请求进行拦截,能听懂不好,来咱们看啊,我现在来,咱们再回到咱们的首页,点击大家看啊,好使不好使,再往下测试拦截器好使不好使,来,再往下。
15:08
好,然后咱们在这来加A斜线回车好使吧,然后再来加,然后一个B回车,一个回车,大家看好使不好,好使没问题吧,哎,行啊,好,所以说咱们的这两种方式都是对谁呀?都是对咱们所有的请求进行拦截,能听懂吧?好,再往下看来咱们还有第三种方式,第三种方式用的就是mvc intercept,能看懂吧?好,这个东西呢,就比较麻烦了,为啥?因为它可以来设置我们当前的拦截路径,能听懂吗?比如说mapping,然后就是来设置它要拦截的路径,那咱们写啥呢?杠星这都认识吧,是不是?好,写完之后大家看这又有一个MVC麦屏杠盘,那咱们这都已经拦截所有了,那这个东西的话,咱们是不是就不用再写了呀,是不是就重复?
16:08
不了,是不是,那咱们再来看里面还有什么标签,看看这还有个什么ex cloudde map屏,啥意思啊,是不是排除,我们要把哪一个请求映射给排除掉,对不对?所以说比如说咱们把斜线给排除掉可不可以,啥意思?当我们来访问斜线的时候,会被拦截器拦截吗?不会,好,再往下,那咱们到现在为止是不是还没有指定咱们的拦截器呢?对不对?那指定拦截器用谁?你要么用B,要么用ref,能看懂不?哎,这能看懂吧,跟咱们上面这俩是不是一样的,只不过就是我们可以直接设置,你设置完之后对所有请求进行拦截,能听懂吧?但是如果我们现在用的是这种方式的话,是不是可以来指定拦截规则,能听懂吗?好啊,行,来MVC冒号啊,不是啊,然后来一个ref,然后它的B,咱们就等于。
17:08
First intercept OK吧,来大家看效果啊,我们现在咱们来执行,大家说它都能拦截什么请求,大家看,按照过滤器里面,这是啥拦截所有对不对,这是啥?这是我们访问主页面,所以说咱们是拦截所有,但是把谁排除掉了,访问主页面排除掉了,所以说大家来看啊,可能跟大家想的有点不太一样,看好。回来刷新,大家看输出了没有,输出了没有,嗯,看不懂了,就再刷新一下呗,来大家看输出了没有,没有输出,所以说咱们的主页面的访问被排除掉了,没有排除掉了,但是看好测试拦截器,大家看好使不好使,好使没问题,对不对啊好,然后但是大家再看我说过这儿写的杠星在过滤器里面是不是所有请来过滤所有请求,那在这咱们写个杠星表示的是拦截所有请求吗?来看一下啊,看好了,我在这写个A,写个斜线,一个回车,大家会发现输出了没,没有输出,所以说你写个杠清,它就只表示我们访问上下文路径下面的一层目录能听懂吧,就是斜线test intercept,斜线A,斜线B,斜线C,像只有一层目录的杠性能匹配能听懂吧?那如果我们。
18:37
那在拦截器里面,咱们要来表示拦截所有的话怎么办,杠星星。能看懂吧,杠星星就完事了啊来,下边我们来重新部署,大家来看啊。好然后好,然后咱们来清空,然后下面咱们再来访问,大家来看啊。
19:04
首先呢,咱们回到首页,这没问题吧,测试拦截器没问题吧,然后在这咱们再来加,然后A斜线回车,好使不好使,你再往后边加,加个B再来好使不好使,你再往后边加,就不用加了吧,来大家看好使不好使,好使,所以说在拦截器里面怎么来匹配所有请求,杠星星可不是杠星知道不啊,杠星型啊好,那下面咱们来看咱们的笔器拦截器的配置,SPAVC中的拦截器用于拦截谁的执行控制器方法的执行好,然后SPAVC中的拦截器需要实现这个接口或继承,这这就不写了吧,因为他已经过时了,是不是啊,那咱们这就不写了啊好,Spring VC的拦截器必须在spring VC的配置文件中来进行配置,比如说大家看来这一种咱们测试过吧。
20:05
这种咱们是不是也测试过啊,以上两种配置方式都是对dispar of所处理的所有的请求进行拦截,是不是这个大家注意,为什么我在这写的是对dispatch所处理的所有的请求进行拦截,为什么你只有dist of it能处理的请求,是不是才会对应咱们的控制器方法呀,是不是啊,是不是啊,你都没有对应的控制器方法,你拦截器拦截啥呢?对不对,是不是啊,行啊,好,再往下大家看,然后呢,咱们上面的这种这种配置方式,然后我们的MVC猫和mapping可以设置拦截的路径,好,然后1CLOUD ex ex cloud mapping是不是可以来设置咱们需要排除的请求,这能看懂不,能看懂不?哎,好啊,行,那这个咱们就不说了吧,这个是我们当前拦截器的配置,能看懂吧,哎,好啊。
我来说两句