00:00
好了,咱们继续看这个过滤器啊。这边的断点我给删了啊。好了。呃,上节课呢,主要是介绍一下咱们这个AOB啊,我再把这OB说一下,AOB呢是一种面向横切面的编程方式啊,就就是将业务逻辑没有关系的程序独立的抽取出来,形成一个独立的组件一,然后以横向交流的方式应用到业务流程当中,一种编程方式,我们叫做面向恒心类编程,面向横切类编程其实就讲究一个啊,就是把那个业务逻辑没有关系的独立的抽取出来,形成一个独立的组件,好大家想想filter是不是就是一个。独立的组件。多数情况下,在filter里面编写的程序大部分都是什么?非业务逻辑代码对吧?业务逻辑代码一般的不是在这写的,业务逻辑代码有一个方法叫service service呢,翻译过来就是业务吧,服务吧是吧,在service方法里面写业务,在service方法呢里边呢,一般呢不要写这些非业务类代码,因为这种代码呢,哎,每个类里边都行,代码没有办法得到复用,怎么办?独立的抽取出来放到过滤器中,将来执行这个service位的方法之前,先执行过滤器中的程序,但是你也知道survey的方法,执行结束之后,如果你还想再过滤的话,你还需要在我们change.do filter下边写程序,在上面写就是过滤请求,在下面就是过滤响应,并且呢,过滤器这个像穿串一样是吧?过滤器过滤器过滤器过滤器最终的资源吧,嗯,它是这样过去的。
01:51
但是你还记住他回去吗?他还回去呢啊。请求过滤响应它还过滤吧,所以你看再放到哪,你说你现在呢,趁着都司的上面放代码,那可能是,哎,你专门对这个请求过滤了,可能响应你响应这块您没有怎么过滤啊,没有写什么程序。
02:10
但是它执行一定是这样执行的,过滤器呢,这个F1F2,谁在第一个,谁在第二个,那要看什么,看你在这个web插面文件中配的那个filter mapping标签,那个mapping标签越靠上的话,优先级是越高,而且上节课咱们也说了,这个有一个叫什么站的数据结构是吧,站的数据结构是后进的啊,最先出去,最先进去的,最后出去。你要知道that一定是最细,最最什么,这个that一定是最后才掉的这个方法,但是你要注意,这个一定是最先结束的,这是最终的资源。而且我也讲了一个重要的方法,就是过滤器执行下一个资源的时候,这句话必须得有,如果没有这句话的话,就下一个资源就就不走了。啊,就是串串不起来了,明白这意思吧,嗯,这个大概呢,差不多吧,这个能理解吧,啊就这么一个东西。
03:00
这发送A请求。啊,这就是呢,给大家体呃体验的第一个例子啊,行了我关掉了,然后这边呢,我打开创建,诶第一个filter程序咱们说了啊,这个就不再说了,往下看filter它的生命周期,好一起来测一下。点右键的新建一个web项目,然后呢,叫做FILTER2啊好了FILTER2。来选这个好。好了,这边呢,我再把这个呢,这个关了吧,啊这个关了吧,然后呢,就开一个二吧,这边呢我再打开啊,这边呢,我再写一下,我们一起来测一测F的生命周期,其实测不测吧啊都一样,来看一下吧,开啊叫filter的生命周期。
04:01
呃,这边呢,我来看一下啊,这边我。写一个超链接吧,这个超链接的话,再写上点pass,我还是加一个斜杠S斜杠A吧,这么一个路径。呃,我既执行过滤器也执行啊A,好,那这样的话,咱们就把这个路径复制一下啊,咱们再重新写一下吧,打开它,然后这边呢。还是这个页面啊,咱们还是写一个serve light来再把这个写一下serve that name,这就是A吧啊serve that class还是A啊,下边呢,再写一个many,再写一个name是吧,再加一个路径吧,这个啊能看懂吧,这就是还是嗯,然后呢,我把这个包建议一下啊。
05:07
这个包建一下来,点中它新建贴过来,这边呢,这个类啊,咱们复制一下,点中它新建一个类,这个类呢,实现一个接口吧,咱们先啊测出接口吧,这个啊实现接口。这里面是不是有一个隐匿的方法,什么什么destroy是吧,咱们这是生命周期嘛,来这边呢,我还是排一下队啊,Destroy往下我还是给它放到什么最后吧,这不in need吗,Service吗?Destroy嘛,我都写上啊,这边写一写,这是个上面就行啊,That in need行吧,然后呢,这边写上叫什么serve light service,在这写上serve light destroy啊。好了,上面是不是也应该再提供一个构造函数吧,构造方法,构造方法好行了,叫light construct是吧,好行了,这个写完了,接下来呢,你可能要写一个过滤器啊,所以这个时候呢,再建个包吧,行吧,再建个包啊叫filter,然后我写一个类啊,这个类还是叫一吧啊FILTER1。
06:25
记住啊。它也是一个组件,它的生命周期呢,也是由他们的服务器来管理的,它对象的创建,对象的销毁以及方法调用程序是无权干涉的,你的任务就是写一个类,实现一个接口,然后把它配到相关的配置文件中,是与这个对象的创建和对象销毁,你管不了,还是跟以前一样的啊,我觉得呀,你这个future呢,学的时候啊,你还是跟原先的东西合并在一起的话比较好学一些,哎。咱们这个filter呢,这边测一下行吧,测一下啊,这个引力的方法我还是给它放到上边得了,这边呢,这个describe还是给它放到上面下边得了,行吧,放到下边啊好,这一块呢,我就输出这个叫什么inite呀,The in inite吧,然后我再来一个啊,看一看叫什么THE1。
07:17
Begin吧,行不行,叫do filter啊,叫do filter begin行不行,中间还是来一个东西别掉了啊,正点do没有这句话,下个资源是不是执行不了,来再输出叫e do filter end行吧,下边这边是什么?叫FILTER1DESCRIBE吧,好,上面是不是来个构造方法叫build什么一吧?好,这边我写上去啊,直接输出叫做FILTER1它的constructor。对吧,好了啊,那这边还没配吧,这个这得配一下啊,随便配啊,愿意在哪在哪配,看这吧,随便配啊来filter。
08:04
Many filter name路径吧,这边的话咱们写上啊,叫做filter class filter name吧,这边叫F1吧,啊这是F1吧,这边的话看点北京part的点加va外点filter叫FILTER1对吧。啊,这个路径怎么办啊,跟这个一样吧,你得一样啊,一样的话它才能走这个过滤器吗?你说你路径写一个叉叉叉,那这你点这个是A路径啊,你点A路径它不符合这个规则呀,不符合这个规则它就不走这个过滤器,它可能只走这个了吧?啊所以你要注意这个事啊,这里写一样,你过滤谁你就写谁就行了。啊好,那这样的话,咱们这有一个filter,这有咱们运行一下嘛,或者先把服务器起一下行吗?来给它部署添加走走filter来OK,看服务器启动啊走。
09:07
看这。服气起来了吧?没报错吧,它说FILTER1已经创建了,并且FILTER1的引力的方法是不是已经执行了,所以可见啊,这个filter呢,和third有点区别,它的区别就在于在这个对象的创建时机不一样,大家还记得这个它啥时候啥时候创建的。第一次访问的时候,是不是这个对象才会创建,但是你看过滤器,人家在服务器起的时候是不是就创了。但是剩下的一样不一样啊,大家试试啊看啊,我访问一下吧。我访问一下啊,哎,我在访问的时候,这边呢,我输进去这个叫什么幺二,7.0.0.1杠叫什么THE1。杠掉杠了杠啊看回车,那我问大家啊,我现在呢,点的这个路径是什么路径,是A的A路径吧,我点完之后它会先执行过滤器对吗。
10:08
但是呢,你先执行过滤器呢,还是先去创建对象啊。对象会创建吗?他得把串串起来才能开始执行吧,来看一看对象创不创啊。词里面的构造方法加上去,哎,反正我可以确定一点啊,不管是谁先执行谁后执行啊,总之呢,是不是肯定这个对象得创建。他对象创建的时候,它只创建一次吧,是吗?哎,我点了啊点。对象得创出来吧,啊,串出来啊。这个对象创建完是不是调引力呀,那这不引匿方法吗?是吧,引匿方法调完之后呢,你能马上调service吗?来走。
11:05
掉到哪了?过滤器执行对吧,下一个断点是不是走到这儿啊,再走那啊service吧,Service执行service吧,Service结束之后回到这了吧,是不是就结束了吧。结束了,你看。他是把所有对象是不是先准备好,准备好的目的是不是为了先串好串啊,串好串之后再再先执行谁。过滤器吗?是这意思吧,总之你别别多想啊,这个对象是不是都是创建一次。那我再反问一次行吗?来把所有动态删掉啊,来,我再访问一次,大家看好了,后退点看底层。再说。
12:03
是吧?哎,你看对象创建了几次啊,对象创了一次。你只要访问一次它底层的do filter就会执行一次,并且对应的什么service是不是也会执行一次啊,所以我说一下啊,这个别多想啊,还是那句话,大家记住就行了,Filter和生命周期是一样的,它是单立的吧。Filter和的生命周期啊,生命周期很相似啊,很相似,可以对照学习啊,或者参考学习吧,可以参考啊学习,所以这边你也注意一下。The和都是单实例。都是单实例多线程环境下运行的组件。
13:06
都是散提供的什么规范都是可移植的,明白吧,都是可移植的,只不过filter和serve唯一的区别,创建时机,注意啊,缺省情况下,前面有几个字啊,叫缺省情况下创建时机什么。创建时机不同filterr在什么时候创建?Filterr在服务器启动阶段解析web.SMR文件的时候创建吗?Serve that呢?在用户第一次访问的时候创建吧。但是要记住啊,我们可以通过一些特殊的手段,也可以让。
14:02
可以通过一些特殊的配置啊,让serve也在什么服务器什么启动阶段创建来这个标签叫start load on startup。来找到,这是一个surprise吗?来看好了啊,在标签里面加一个标记叫load load on startup1。或者写个零吧,你行吧,写个零啊试试啊。关掉起来啊走。看了吗?所以它俩是不是彻底就没有区别了,完全一样行吧,完全一样啊,没有区别。这里。这是可以配的,配完一个load on配个零,啥意思?解释一下啊,我我先写上吧,这个行啊,先写上注释啊,在服务器启动阶段加载什么slight实例化对象实例化啊S来对象明白吧,好了,那这样的话这边写上啊,写上之后关掉,关掉之后这样吧,我再写一个词来行吗?
15:22
我再写词了吧,我再写一个啊。复制一下贴过来,这个改成B行吗?改成B啊,这改成B好了,这改成B之后呢,咱们把这个路径复制一下吧,也别复制了啊,在这是不是有S复制一下这个啊,接过来这边呢,我改成什么B吧。B啊,这个改成几啊一这改什么呀?B这改什么呀?B是不是B路径啊B啊BB来好,这个写个一,这个写个零。我再试一下吧,哦对了,这类没写呢是吧,这没写呢啊得写一下,行了,那就写一写吧,我这边的写一下加什么b serve select吧,好了,这边呢,我直接把A呢ctrl a全选CTRLC复制CTRLV切过来。
16:14
有。改成B吧,要这边的话也得改是吧。嗯,这个改成B吧,咱B啊B。B行,这边我看一下这个啊,嗯,这是什么?AA吧A吧A啊行了,就这么着吧,配完了吧,看啊给我加了个路径对不对,配置文件里面配上去了吧,那也写了吧,来我这重新部署一下啊,来部署点它部署,然后点OK把服务器启动。一起看一下。哪个先哪个后啊,A先B后对吧,来我再换一下。我把这个改成什么一,把它改成什么零。
17:01
块也不用改这个改成这个改这改成行了,这改成零了,这么着吧,啊来这改成零之后呢试试。把服务器启一下。B先OK吧,AAA在后边吧,是吧,这样啊顺序变了啊,所以这边的话呢,大家要注意这个问题。这边呢,写一个什么就行了,写一个自然数啊,或者是写一个就写个自然数吧,别写负数啊。这或者是。自然数啊即可,越小优先级越高对吧,越小啊优先级越高。先创后创嘛,是吧,优先级高的啊,优先级高的。优先级高的her会被先实例化,明白吧?啊,这个load on style要记住啊,这有个标签,这个你得记住这个问题。
18:17
再来看一看啊,这边呢,大概呢,走一下点它。点部署,打服务器启动,启动之后我们一起来看一看,这边有没有创建A,有没有创建B呀。是过滤器吧,嗯。这是A吧?这是B吧,A先创建B后创建啊,接下来我就访问了啊,后退刷新。有两个吧,应该是我先点A啊点A大家看是不是直行了。那我再点一次,那就执行呗,我再点一次就执行呗,我再点一次执行,他肯定就不再创建了,是单立的吧,所以这个时候接下来你想想关闭的时候。或者或者这样吧,我我这样啊,关闭的时候它会销毁吗。
19:01
会销毁对象吗?会吧,社会叫destroy吗?走。是吧,A filter吧,是不是design了啊?接下来啊,我希望点这个B的时候也走过滤器怎么办。B的路径是什么?是B吧,所以这时候过滤器是不是不会走啊?不会做这个过滤器啊。因为你这个过滤器现在这写的是A嘛,才会走过滤器,所以你要写的话加一个什么,是不是再加个B呀,这样是不是B也走这个过滤器了,你发动B型就这么值来试试啊,看行不行。给他启动。部署启动啊,来点这个启动。启动之后呢,AB什么什么filter都创建出来了,创建完之后呢,接下来啊,就可以执行了啊来刷新这个页面,然后点A,它是执行了直行A吗?直行过滤器吗?来我点B啊有没有直行过滤器,有吧,来再换一种方式,这种方式不太好。
20:10
写这么多累不累呀,是吧?对吧,啊,看清啊。嗯,我点它点它点它点它OK,把服务器启动好了,这边后退啊刷新刷新完之后呢,点它有吧,点它是不是也有啊,都可以啊。好了,那这样的话呢,主要是说一下这个啊,大家要把这个记住,The它的生命周期。和什么一样一样来看,Build和之间有什么关系啊,两者都是服务器提供的服务器服务资源对吧?它俩都是组件吧,都是散提供的规范吧,都能移植吧,并且filter和它生命周期很相像吧,另外他们的配置方式相像啊。
21:09
也像吧,另外过滤器和这个select是不是都是多建成单力的啊,都是多线成单实力的啊,所以这个过了啊,往下看多个过滤器之间的关系什么关系啊,Filter mapping越靠上怎么着,优先级越高吧,另外do filter这个方法什么意思?执行下一个过滤器,如果下边没有过滤器的话,直接执行什么来吧,啊就这意思来,接下来我们写几个过滤器啊,写完这个过滤器,咱们这个。就说完了啊。第一个主要讲基础语法,第二个主要讲生命周期,关掉。再来一个。我专门写一个啊,IP地址过滤器,我只允许咱们班里边IP地址为三的这位学生访问我的这个程序啊,其他人都不能访问,这该怎么做?
22:01
嗯。简单写一下啊,IP地址过滤器啊,这个经常会用啊,嗯,这边呢,我就多写几个吧,来这边我还写一个叫request.get contact行吧,来,然后写一个杠,写个serve that,写上A,然后写个a serve that好,我这边写上方航,把这个复制一下,然后这样写上去行了,这边什么呀,这是个B吧,把这边写上啊BS好了,这边有个A有个B好了,咱们把这个复制一下,然后接下来打开我们的插面文件吧,在插文件中呢,我在这边啊,有一个什么呀,Like吧,我把这个写一下啊来再写一下啊,我就不再复制了啊,Name加一个,这边的加一个name加一。
23:05
Car啊好,贴过来,然后呢,这边写个A,这边写个A,这边写上com点给点加va web点叫A是吧,好了呢,接下来这个复制一下吧,然后呢,直接贴过来,这边改成B就行了,行吧,改成B啊,这个改成B,这个改成B啊,这个改成BSO好了,那这样的话都改完之后呢,这个包里建一下吧,建包啊复制一下,咱们贴过来,然后OK,这边呢,写上A吧,把这个a that复制一下啊然后呢,咱们点住它直接写这个A去继承吧,还是t TB that,那这边呢,咱们直接finish,呃,看一下这边生成一个方法,这个方法叫do都盖了吧,啊行,这边呢,写上啊,这叫request,这瓶response吧,好。这边呢,咱们写上什么呢,就写上这个a light吧,就写上A。
24:03
That excuse吧,对吧?好,那写完了啊,不写什么东西,在这写个类,这个类叫什么B吧,好,这边呢,也写上这个改成B吧,叫b service的service吧,好写完了,那么大家看啊,现在我要求是这样的啊,咱们班里边只有IP地址为三的这位学生可以访问这个service方法和这个service方法,其他人都不能访问,那这样的话,大家想一想,是不是应该在这写上判断ID,是不是判断ID呀,怎判断呀,点盖什么remote address吧,返回一个什么IP地址吧,IP地址这边的话,如果怎么着,192.168.1.3是吧,点什么E什么IP的话,如果这个的话,我就让他访问吧,或者是如果是这个的话,我就让他访问继续走就行了,大概是这个意思吧,啊,就能访问啊,或者给个坡类行access OK。
25:04
Do。什么OK是吧,啊可以看去,那这样的话我判断一下如果怎么着。Access OK的话,Else是吧,如果这样的话,我就可以输出什么叫a service excuse吧,嗯,就完事了,其他情况的话是response send,什么readdi direct重下吗?重庆下到哪啊?Error啊叫request.get什么pass,加上是什么杠error.jb是吧,那这样的话你就可以把这个AB写一写了,大家把它复制一下,接下来是不是在这个Webb下边直接点右键新建CIP。OK,这边写上,这边把这个JP这个复制一下吧,这个复制一下翻过来,这边改一改就是错误报告什么页面吧,接下来这边删掉啊,您没有权利访问啊,请联系管理员吧,这边写上呃,Center啊,居中。
26:20
出了这个这边呢我写上box,这边呢我写上去color红色啊点没有权力访问啊。或者没有权限吗?没有权限啊,访问该资源请联系管理员对吧,请联系管理员,诶行了。呃,这边呢,是这么写,我问你啊,到这需要判断吗?到这个类里边是不是需要判断呀,是不是跟这代面是一样的呀,你是不是还得把这个复制一下放到这,你想一想是不是跟这个长得一模一样,你想判断IP吗?是不是只有这个输出是不一样的,怎么办呀?
27:07
写过滤器吧,所以你不要这么写啊,不要这么写这个代码,不要这样写,你这个代码完全可以写到什么过滤器里边,这个里边是不是只写业务,只是编写什么业务吧,啊好,这个也一样,这个呢。完全相同吧,只编写业务啊,这个不这么写,只编写业务,只不过这个是什么。这是不是B呀?好了,那先写不离系吧,那我就举个例子啊,写玻离系怎么写?老规矩了啊,见个包吧,Filter吧,好,这个filter叫什么?叫IP filter行吧,IP时间点接口啊,Filter接口吧。错了啊。写这么多遍,怎么就上不去呢?
28:04
好,这个过滤器呢,我就来写一写怎么写这个东西,放到前面直行A和B之间都经过过滤器吧,怎么写这个。Request有个方法叫get,什么remote address了是不是返回IP啊,判断一下,如果什么IP叫幺九二点幺六八点一点三点E什么I,我就让你继续往下了,怎么继续往下,是这个是不是继续往下呀?Else怎么办?respond.send什么direct吧。哎,这个怎么没有这个方法呢?你看怎么没有呢,这个response怎么没有这个方法叫send什么呀,没有吧,是不是没有这个方法,哎。这个的问题。啊。所以这边呢,我们做一个强转third request吧,啊request啊,等于什么htt third什么request吧Q啊上面改成什么。
29:04
Req行吗?Res行吗?这边怎么办呀,Htt什么third response吧,Response吧,是不是做强转啊,HTP什么response啊,都给它强转一下,都给它转成带着什么HTTP的,因为我们这个架构呢,是基于什么呢。是基于HTP协议的吗?是吧,好,这边转完之后response行了没?这个方法有了吗?是不是有了啊,有了啊,可见这个方法是不是子接口里边的get contact吧,怎么写加上什么刚什么点dad吧,这就行了。这个过滤器就写完了。你写完之后,你还得配呢。你得配进去吧,所以这边过滤器你配的时候呢,你要注意多写几遍啊,Filter cloud filter name,然后加上什么filter mapping啊filter mapping,写filter name吧,然后再加上一个什么URL pattern吧,好,这边隔开一定要注意这个路径也是有技术含量的。
30:11
因为都是带这么一个东西,所以这边写什么就行了,星号都过滤能理解吧,这边写上啊叫IP filter啊,然后把这个复制一下,给它放到这,这边呢,咱们这个类名写上,把这个复制一下,然后给它放到这个位置上,这边呢,我们把这个类名复制一下,然后我们打开这个啊,这边给他写上。行吧,这样就可以了,起作用吗?我们试试看起不起作用啊,这个过滤器你想一想,以后你还用写吗?以后你还用在这个里面写这么多程序吗?不用你写业务就行了吗?这是不是写业务就行了,真正过滤规则是在这个过滤器里面写的啊,所以呢。咱们这个过滤器肯定是起作用的啊,如果行就继续往下,不行就跳转到错误一面来,给它加到toca服务器中,然后finish OK,把服务器启动来,我说一下啊,大家都别动啊,因为你访问不了。
31:09
然后我反问一下行啊,我问一下啊,这个是什么。访问了啊。这边是什么,是那个127吧,幺三是吧,我点了啊。我点A吧,行啊走。不行。是吧,那不行啊。不行吗?为啥不行加断点嘛。啊,来走。是不是过来了,这个IP多少啊。是这个吧,那不行啊,访问不了,你看还有同学访问啊。刚才是ID多少?去掉。
32:00
咱们班有IP3吗?你IP多少西氧等会啊,等会等会等会啊西是吧,行这边呢,我再部署一下啊。我在这加断点都都都别动啊,IP地址为七的这位学生访问啊,然后就都都别动啊。这个点三啊。幺九二幺六八一点一百。好了,你看他过来了,你看是吧,再往下走是不是成立了,走了啊,你看这是不是有了,他能不能访问能。这就行了啊,最基本的一个IP地址过滤器就写到这了。啊,这个可以了,但是呢,有一个问题,你说这个IP地址写死到程序中有是不是不好,IP地址写死到程序中不好啊,来讲一个新东西,来外面插面文件中,在future这个标签中可以配一个东西,大家还记得什么吗?讲in need para是吧,The para name和什么value啊好,这边大家要注意,这叫什么the的初始化参数,大家呢,好像应该是见过吧,这个是不是在标签里面也配过这种东西啊,在这个里边配的这个叫什么?这叫什么?同志们,这叫的初始化参数。
33:35
明白吧,哎,这个被封到哪个对象里面了,这些配置信息被自动封装到叫什么资二带什么con对象中了吗?啊好了,这边呢,我注定啊度是量,那么大家想一想啊,如果是这段信息的话,它应该是自动给封装到什么里边的。以下配置信息会被自动封装到那个叫serve,这个叫什么?哎,你猜的对啊,Confe,你看这有没有。
34:17
是不是在引力的方法上面呢?行了,就就就这么着吧,这边是IP吧I pip地址啊行了,这边咱们写上幺九二幺六八一点一百五也行了,逗号127.0.0.1也行,逗号192.168.1.7行吧,这都可以访问了啊,我就我配几个几个人就能访问,我说谁能访问就能访问。之后控制配置文件嘛,中间是不是用逗号隔开的,用逗号隔开,逗号隔开啊,那么接下来大家想一想,在这个对象初始化的时候,这个方法会不会执行,这个con对象里边有数据吗?我这个时候是不是可以调用get引need parameter name,这个name是谁?
35:05
是不是在这个配置文件中有一个IP这样的name吧,所以这个时候我是不是可以把它放到这,此时这个方法返回个什么类型,是不是string,你返回string之后,你想一想这个string是不是一个IP字符串,IP字符串吧,是多个吧,好,这个字符串是不是逗号隔开的,你想一想这个是不是逗号隔开呀,那这样的话你是不是就有一个学过一个方法了,叫什么字符块,有个方法叫Li吧,是不是切割呀,按什么切割逗号切割是不是返回数组啊,叫IP数组吧,呃,IP away啊IP数组,这个IP数组之后呢,你在这是不是可以给给一个list的集合,对吧,叫IP list吧,又一个什么every list,来又个list,行了,这样加进来,好嘞,加进来这边这个隐匿的方法,咱们给它凑到上面吧,啊来这个第算方法,咱们给它放到什么呀下边吧,行吧,好了大家看一看这。
36:05
这样呢,是不是可以负循环?每循环一次,是不是可以把这个IP放到什么?IP list的集合里边吧,这个方法只执行几次,而且在服务器启动阶段执行对吧?因为这个对象什么时候创的,服务器启动阶段创的,所以这个已进子的方法在服务器启动阶段会执行,那这样的话,等服务器启动成功之后,这个历子的集合里边是不是就就有ID了,那么接下来这边怎么写?还取啥取呀,这编程怎么还还还得取呢啊,怎么想的?没学过这个方法吗?包含学过吗?如果这个例子的集合里边包含你这个it的话。
37:02
能走不能走,不帮咱就走这个吧,你这不都解决了吗?是吧,你就不用取了,你绿色的集合好用啊。要不好用,我就直接用这个数组了。是吧,我还再放到历史的集合里边干什么呀?是吧,行了,那这样的话咱们再来测一下啊,这个我来部署一下,然后我来访问一下啊,来把服务器启动吧。启动之后呢,我来访问,这次我行了。应该能访问了吧,那这边我加个断点啊,然后这边我来访问一下啊,来点它。走了吧,这个例子的集合呢,我们可以考虑看一看。嗯,This里边有一个例吧,嗯,元素吧,它它它吗。是吧,有吧,有的话咱们就往下走了啊,往下走啊,进去了这就可以了,是吧,那你说你现在访问不行。
38:02
你要是预防了,那就就到那个页面了,错误页面了,所以这边呢,我再测一下吧,怎么测呢,我关了它啊,关了它之后再改一改行吧,我再把这个打开这个改成改成其他的啊。嗯,比如说六啊,这边我改一改幺九二点幺六八点一点。发啊随便写吧,反正呢,我这个IP呢,跟这个IP是不一样的啊。来把服务器启动一下,大家别动啊,别动啊,我来访问。这边呢,后退一下,然后我刷新之后,我点它你看。是不是过来了往下走是吧,结束了啊,就讲到这了,没有权限啊,行把这个关掉,嗯,咱们断点给它取消掉,好的,这边拿开。把它关闭了啊,这就是那个IP地址的一个过滤器,没什么不理解的吧,行了啊,这个过了,关掉它这个项目咱们不写了,不看了啊。
39:03
这个关了吧。接下来我们实现一下这个字符编码行吧,把字符编码这个实现一下。怎么写简单吧,超超超简单是吧,反正我觉得是超简单。来写什么filter吧,就写个什么就行了,Character encoding filter似乎编码过滤器filter吧,啊,接下来呢,咱们点finish就行了。接下来呢,这个程序怎么写啊,就一句话就搞定了,request.site大家听见吧,GB18030吧,然后趁点什么都行,这就可以了啊。你就这么简单吧,没什么技术含量啊。
40:03
这边的啊,配进去吧,字符编码过滤器这边咱们把它这是包啊,咱们把这个future写一下啊,把这个future class,把这个filter name啊,把这个filter mapping啊,把这个future class加上这个URL part啊URL part好。不是这个上面的吧,这个吧,叫character including the是吧,这个能过去不能。能过去是吧,能过去就没问题啊,这边呢叫嗯,Character and calling啊好了,这个呢,我们来复制一下放到这啊,一定复制这杠这点杠行啊。是吧,所以现在你应该知道了,为什么从第一天开始,我所有的路径前面都加什么,如果你没有按照我这个做,那你吃亏了啊,没法控制了,行吧,这个东西呢,我就是控制一下,大家理解就行了啊,其实这块最好也写上谁response set content type啊,THTL叉set等于GB18030,最好也写上,其实现在我们不写也行啊,不写这个也可以啊。
41:26
Response既解决请求,也设置了什么响应的字符编码方式。啊,响应写到下边也行是吧,那写到这也可以,没关系,反正这个对象就一个吧,这对象就一个就一个。啊。Response了,强转不用,那也不用啊。你把它传进去,你要知道叫编译期是这个运行期,它自然就是谁了。
42:04
STB了啊,你不用管,这不用强转啊,你又没有用它,你用这个快里面特殊方法了吗?你用该在那个方法了吗?你没有用啊,这边不用强转,你你你强转就费劲了,你没强转它到底层是不是也能接受。是你又你又写吗?这边没事啊,没问题,这个词你怎么搞不清楚运行和编译期了呢?这个运行题它会付给他吗?能付过来吗?这非得强转。非得把这块转成那个HTB吗?可以这么做啊,转转转一下吗?不用啊,不用转不用转。方法调用的时候,传参的传的是这个变量中所保存内存地点,这个内存地指向对象是什么对象?是这个吗?这个我就写到这儿就行啊,这就是过滤器就写完了啊,这个我就给它部署一下,然后呢,我就把服务器提一下啊,这算是我今天写的第几个呀,第。
43:12
第二个过滤器吧,第一个过滤器算是什么IP地址过滤器吧,这是第二个啊,这是过滤什么呢?就是过滤那个叫什么字符变量方式的,对吧?这个还得还得还得删一下是吧?这个都不用了吧,这都不用了啊不用了这个来都打开这个,凡是有这个咱们全注掉,来都打开这个。也不用是吧,咱们测一个是不是就行了。这东西你说我全住了,那多费劲呢。那走吧,我就住掉了啊,都住掉,凡是累我就我就里边有这句话的都住掉。这里边没有是吧,这个里边也,哎这里边有是吧,这个我就住了是吧,啊住它啊好了再往下是不是还有一个这个吧,这个没有是吧?这个其实应该有的啊没有好了,那这好是不是都去掉了,都挨着排去掉了啊这个这个都去了吗?
44:07
去了是吧,你这记性不太行了,这个。忘了你。住没住都忘了,哎,点它。OK,服务器启动啊,我再试试,我就拿最简单的试一下,试一下得了啊。嗯,我就点一下登录,然后呢,我就看一看吧,比如说哪一块呢,这一块吧,这一块,然后我就点新增吧,新增就这吧,这边我就加个断点行吗。我往过滤器里边加断点吧,这边加个断点啊,我试一下,这边我就写上用户代码叫叉叉叉叉写上。走不走?是不是肯定走了,走了。这个为什么走了呀?因为是阿贾克斯啊。是吧,贾克斯走了啊走别管它,那接下来咱们咱们往下啊,就是往五行吧走走你你点那个会不会走啊,走你看又走了吧,又走这句话了啊,又往下走,所以没事啊,你看这个玩偶出来没有。
45:08
怎么还有一个?啊,它底层有啊,甚至是这个没问题吧,没问题,这个乱码是解决了啊,咱们就这么做就行了。这是我们项目中最简单的一个东西了啊。过滤器就这么写就行了,好,这个任务完成了啊。咱们再来一个过滤器。还有两个过滤器啊,写完这个过滤器才行。还有两个,咱们把这个点右键啊,新建一个,嗯。叫future,这是几了四是吧,好。Finish啊。我就再写一个,我从三里边复制吧,啊,省得老写。也不是个事儿是吧。复制一下啊,放过来行吗?放过来之后呢,这个插面文件我干什么呀。
46:03
复制一下行吧。神复制啊来这边粘过来替换啊好吧,那这边呢,我把这个三呢关闭了,跟他没关系了,这个打开这边呢删掉,嗯,我再写一下啊叫统计方法的执行时长,叫统计方法执行耗时的过滤器写上去,超链接写上去request.get contest past杠加上去啊叫。嗯,这我起个名吧,叫A点度吧,啊A点度行吧,然后这边呢,我就写上去,这个是一个。
47:00
A serve night行吧,然后再换行换行我把这个复制一下,我直接放到这啊,这边改成什么呀?b.do啊然后呢,B serve ne能看懂吗?我只要发送这个或者这个它就会执行,那这样的话打开插面文件啊,插面文件中呢,大家看配的什么东西啊。这个是不是可以删掉了过滤器。这个一会儿改一改。不删了,删掉了啊删掉,然后这都删了啊都删了,但是这个不用删吧,这个third that留着吧,一个A一个B吧,只不过这要改成什么b.do这要改成什么a.do吧啊a.do行了,那这样的话A和B都有了,这边是a right b right啊那这样的话,这个A和B的话,大家看一看是不是在这有啊比这个A和B吧abd打开AB方法执行,AB方法执行好。但是呢,项目经理或者是我们的程序啊,要求什么呢?要求我们在执行这个业务方法的时候,统计业务方法耗费的时长,比如这个可能是银行项目啊,他可能会耗费一定的时间,比如说2530耗费这么长时间,他才能把这个业务处理完明白吧,然后呢,比如说我这个再模拟一下,这个可能也也也也是需要耗时的,那这样的话,这边呢,可能也是需要耗时的,耗时。
48:20
是吧,耗费时间的啊,这个咱们放到下边吧,啊开始处理,处理结束来把这个。贴过来放到上面吧,这个的话咱们叫B开始什么开始处理开里开始执行或者提供吧服务吧,提供服务啊下边这个叫什么?提供服务结束吧,提供服务啊,结束终止,那这样的话,我把这个复制一下啊,然后呢,我在这个里边也写了啊,也有这么一个程序,只不过这个是一个什么呢?叫AA吧,好就是这样,这个成绩就是要求你在执行这个的时候,把这个时间统计一下,把这个统也统计一下,那我问你啊,你在这是不是要统计。
49:07
你在这是不是也需要统计啊,那你这种代码一直写一直写是不是挺费劲啊,所以这个时候呢,推荐你啊怎么着啊写的过滤器,过滤器咱们是不是写了在这吧,打开,只不过这个过滤器要改个名啊,过滤器删了得了,重新写吧。这边呢,我就写个过滤器,过滤器叫什么呀?叫开啊filter行了,这个过滤器时间给记住了,就这吧,好点finish就行了啊好,这个过滤器呢,咱们就来写一下这过滤怎么写啊。开始之前把方法时间是不是记录一下,second.begin the current吧,然后结束的时候是不是记录一下,嗯,中间写什么?读filter吧,好,这边呢,输出吧,耗费的什么时长啊?是多少毫秒?是不是那个叫begin啊,不是in减去什么begin,这是不是就是这个时长啊?好,我们这句话能随便放吗?能放到这吗?
50:13
是不是开始一下记,记一下时间,结束的时候记一下时间,中间是不是就是目标啊,这就行了,这个写完之后你得配进去啊,配过滤器是吧?来filter配进去filter啊,配一个filter class,配一个filter name,再加上去mapping吧,Filter mapping啊,再加上一个future class,再加上your partner这面写什么?轻点度吧,啊,然后这边呢。咱们就随便写一个啊叫timer吧,然后把这个复制一下啊,放到这,这边呢,这个类名呢,最好把这个复制一下吧,来复制一下放到这啊,然后这个呢,咱们再打开,把这个类名从这复制一下,然后再打开这边咱们再贴过来,这样就完美了,以后你只要发送任何一个请求,带度的都会走过滤器吧,走过滤器的时候都会称吧,一称的话,它是不是就走到底层了,底层走完之后是不是就记下时间啊,是不是有输出啊,所以这个你得会啊,行了,这边的话我们就给他。
51:16
加到我们他们的服务器中,我们看看能不能计时啊,把这个服务器启动就行了。这叫面向横切面编程,现在你应该体会的差不多了啊,这边呢,我写上127这个几啊四吧,我点了啊点第一个。行不行,能计时吗?可以吧,来,再来点它。是不是也行,就是你不管现在执行哪个,你是执行这个还是这个。你不管是执行哪个吧。他这个底层的计时器都会走。那比如说这是个发送邮件呢。或者是个发短信呢,是不是发邮件发短信只需要写一次就行了,你不用老写,你们在这发,你在这还发是吧,所以这个呢也要会啊,这个也要会行,这个过了啊,关了这个过滤器的差不多了,还有一个过滤器,咱们过滤器讲讲讲完啊把26复制一下,还有一个问题存在,这个是今天的重点啊,最后一个压轴了啊。
52:19
咱看看啊。这个你必须得会啊。咱把这个路径拿一下,我来说这个项目存在什么问题,问题严重了是吧。写了半天,有问题,问题很大。来,咱们把这个关了啊,这边呢,我们一起看一下,呃,把这个启动了啊,启动之后呢,大家看一看。是不是就可以访问这个项目了,打开啊,重新打开,打开之后呢,我在这呢,我按照正常的方式走的话是登录吧,然后登录完之后,我是不是就是点它点它是吧,这都没问题是吧?点右键啊,我看一看,我如果已经知道了你这个东西路径,我把浏览器关了,我直接打开它,我不登录也能访问。
53:08
是吧,我就不登录。回车。我还能删你用户呢。你登录有啥用?是不是你登录没有用啊。你怎么没控制住啊?我这要知道你的地址了,我直接把这个地址粘到这,粘到这之后我一敲回收不就访问了吗?底层一走,你看我这我不是你这个网站的会员,我也照样用你网站的一个服务嘛,是吧?所以这种方式肯定是不行的啊,所以大家想一想,是不是应该在执行我这个程序中任何一个serve,只要是serve,执行任何一个之前得判断一下你是否登录。如果你登录了,我让你继续访问,如果你没有登录的话,我是不是让你跳转登录页面,是不是应该有这个功能,我问你是不是任何一个类里边都得写这个东西,如果你在任何类里边都写这这句话的话,你想一想,这个编程量是不是很大,你在这写一遍,在这是不是还写一遍呀?你在这是不是还写一遍呀?所以你不能这样做吧,怎么办?
54:14
过滤器呗,写过滤器啊,咱们写过滤器吧。也就是在执行任何一个程序之前,我们必须先经先经过过滤器的判断,如果你的用户已经登录了,那我可以让你继续往下走,如果你没有登录的话,我是不是让你去登录啊,所以就就就就这么做啊,来,咱们试试怎么写。思路有吗?叫check吧,就叫check吧,Check login吧,行吧,Log in啊叫filter。Checklo,检验是否登录的一个过滤器,实现那个接口filter吧,所以这个很重要啊,你要是不会这个,你得也能编程是吧,也行,你只不过是不是在每个类里边是不是都得验证一下它是否登录吗?这个比较麻烦,咱就在这写吧,啊好了,那么这边呢,你要写它的话,大家想一想这边怎么应该怎么怎么去写,就像刚才说的是不是用session。
55:10
登录跟没登录的区别是什么?30里边有没有数据吧,30里边如果有一个用户对象的话,你想一想是不是代表他已经登录了,因为你看一看你在这是不是曾经写过一个登录的,你把这个登录打开,你发现你登录成功之后,你如果登录成功了,你会开启session,并且将数据存到session中,如果session中有这个用户的话,这证明这肯定是什么登录了,所以这个时候呢,我们就以这个为判断依据啊,来验证怎么写。要不要强转,这次得强转吧,你不强转你得调,你怎么调啊是吧,HTPC带什么。Serve request啊,这边呢,改成http request request行了,这个叫request,这个改一改啊好走包前边呢,咱们把这个啊给它放过来行了,这边呢,改成这个啊,然后咱们改成什么f t be成response吧,Response吧,写过来HTP什么response吧,Re好这样,那么大家想一想,现在转过来之后怎么判断request点该session吧,好,我们你这个创还是不创fourth吧,写false啊R33吧,好,首先大家想拿到三之后干什么?首先你得判断30是否等于空,你不能贸然去调30里的方法啊,如果调的话,有可能出现空时针异常,所以判断30钥匙它是不等于none,并且session的get ait的叫什么yo,它是不等于什么,那这说明什么?
56:48
已经到了吧。这俩能调换位置吗?这两个条件能调换位置吗?
57:00
先执行它行吗?不行,可能会出空时针吧,所以一定要严谨啊,这样去判断它不等于空,并且它的调它不等于空,怎么办?Ten点是不是能继续通过了,继续执行else呢?Response send read right写上是不是就行了?是不是欢迎界面。但是这个写的会有问题,有没有有一天他是真的去登录去了。登,登不上了。登登不上了吧。他真正去登录的时候,是不是也会发送一个请求。是吧,他也会走过滤器吧,那个时候有在吗?他正在登录,还没有登录成功有吗。行吧,这边看一看啊,这是一个这个验证啊,是否登陆的过滤器,这个在项目中是必须要有的,如果没有这种东西的话,你项目是不安全的啊,来把这个复制一下,然后咱们直接给它贴过来放到这,你要过滤所有的来是不是这么写,这边叫check什么。
58:22
Check login filter吧,把这个复制一下放到这儿,然后呢,咱们把这个打开,咱们叫check login,所以把这个复制一下,咱们直接贴过来放到这吧,好,这样的话咱们试一试看行不行。是不是肯定有问题啊,来来来。我觉得他其他能挡住了。其他的能它能不能挡挡住啊,来挡一下啊,这个能挡住吗。点了啊,我点之前我加先加个断点行吗。哪个来的?There,是这个吧。加个断点。
59:01
还走不走,顾利系来,我点了啊,点这个走了吧,Request response走session,它本身session是不是空,Session应该不是空,因为访问的JJB里有session嘛,所以这个session不是空啊,Session是不是空的,是有值的,因为你毕竟访问的。刚才的这个欢迎界面,这个欢迎界面是个什么界面?是login JSP吗?JSP里面有没有session?有吧,所以session已经创出来了啊,但是呢,这三声get吹的呢。有值吗?没有值,是不是走到这了?你看确实人家起作用了吧。是不是起作用了,你看啊,这边我我我我再点我点你点不行啊,你点访问不了了。是不是让你登录呢,啊,所以你只能登录了,你登录登不上了。就登不上了。为什么呀?我问你啊,你现在登录的时候执行不执行这个log in。
60:03
而你这个log执行的时候,你走不走过滤器啊。过利西走的时候,三就get tribu的方法,得出的值是空还是?是空吗?你登录成功了吗?你是不是在登录啊,你登录执行这个do post的方法之前,是不是就已经执行了过滤器了,过滤器里面调了一个方法,是不是得出的值是空,是不是到这了。所以所有路径都能拦,就一个路径不能拦。登录的时候不能拦人家。登录的时候不能拦,不能拦截啊,怎么做?有一个办法非常巧妙啊,就是将登录的这个地址改一改。对吧,你只要把这个登录的地址改了是不是就可以了,一改地址。他还还还会走这个过滤器吗。
61:00
不会吧,还有一个办法。你如果要是不改这个路径的话怎么办?我在这一段过滤器的时候,我验证一下我先拿什么。过去访问的pass吗?我以前讲过这个方法吗?如果你有印象的话,我在前五天讲过。磁带路径怎么获取?是这个吗?是吧?如果什么。是这个路径吗?这个这个路径让他过还是不过不拦截啊,这个路径哪个路径,这个路径啊点E。如果你搜路径是这个路径的话,我不拦,明白吧,不拦。
62:03
但是一定要括起来,后边跟什么或者是吧,是个或者关系啊,括起来吧,是不得括起来看清楚啊。路径是这个路径。或者是。这个括号能不能去掉?去掉的话,这个货和雨的优先级是不是出问题了,所以要注意我们应该是分块的这个,或者是后边这一堆吧,是这意思吧,好,我们再看一看行不行。这边呢,我们把这个项目再重新部署一下,然后呢,把服务器启动,然后我们把这个打开,然后我们在这刷新,刷新之后呢,我们点这个登录吧,哎,我看这个能拦住不能啊,这个能拦吗?能拦住吧,好点它。
63:00
来了吗?没蓝,这行了吧,行了。这都行啊,没问题啊,你只要进去它是不是就有单身啊,它走没有走过滤器啊。这会走了吧,这你帮我点那个保存,它是不是也走过离去了,他为什么不让你跳到登录页面啊。因为你已经登录过了30里面有数据吧,这就可以了,但是呢,我还希望过滤GD把,GD也不能访问。JSP也不能直接访问啊,我来看看这个吧,这是个JP吗?是吧,他能拦住这个吗?拦不住啊,来关掉,直接打开,我直接访问这个GP也不安全吗?他拦了吗?是不是没拦住啊,虽然他点那个保存的时候,他点不了,他一点就拦住了吧,但是你最好也不能让他访问JP吧,所以怎么拦。怎么写啊,不是错了啊这。
64:07
这个验证是否端正的过滤器加一个什么,我连HTML都给他拦住,怎么来?行吧,这次完了。登录界面是不是打不开了?你想登录界面肯定打不开了,你拦住了呀啊,你连登录界面都访问不了了,试试啊。打开报错看啊看这嗯是吧,刷刷刷刷正在重新你看啊再看啊,看浏览器左下角的状态啊,左下角左下角看啊这。正在处对象呢。打不开了,实际上是内存溢出了啊,这个是不行的,访问不了。
65:00
你防就到这,房就到这,你这下边的就一直走了。你一访问这个,他走到哪儿了?过滤器里边。它反应力方问GB嘛,那这样的话,它是不是这个条件不满足,是不是就到这了,而这个是个什么。是不是log g啊,那我问你啊,log.g它又发了一次,会不会走过滤器啊。是不是就走到这了?重庆向是不是相当于浏览器又向服务器发了一次请求?而这次请求,他是不是又过滤了?所以你什么不能过滤啊。来。继续加啊。复制一下吧。放到哪啊这吧,这改成什么。目前我们只能这么写,行吧?Zb log.jb不拦,剩下全部都拦啊,但是这样的话。
66:03
来把服务器挤一下,然后我们再来访问一下,看看这次有没有问题。打开欢迎界面。不拦了。是吧,通过了吧,往下走啊,但是说你要是直接访问它HT他能拦住吗?打开啊,我试试啊看行不行。直接贴过来回车。对吧,所以现在整个网站的入口啊,只有一个。只能点登陆。明白吧,所以这就是安全方面的啊,大家呢,要把今天的写的四个过滤器呢掌握了,第一个过滤器是什么。IP地址的限制,第二过滤器呢?字符编码第三个过滤器呢?计时第四个过滤器呢?拦截的验证登录吧,啊这个。行了,今天内容呢,也正好吧,啊也就结束了,讲两大知识点,一个是反射,一个是a op,面向横心练编程方式啊,这个不是错啊,这个。
67:11
这个他可能是买一件出点问题啊,你不用管他。行了,这个我打开一下啊,大家把代码下一下,然后可以休息一下啊。嗯。
我来说两句