00:00
我们说呀,这个future过滤器最常见的应用场景呢,就是权限检查呀,日记呀,事物是吧,那么我们就以权限检查来作为这个说明来演示啊,咱们这里呢,有一个出体验啊,要求什么东西呢?就是一个示例,要求在你的web工程下有一个ADM目录啊,这个ain目录下的所有资源都必须是用户登录之后才允许访问。才允许访问好了,那么这个所有资源都都是哪一些啊?比如说举个例子啊,HTM没有页面是吧,JPG图片,JSP文件等等都算,只要是放在这个目录上的任意的类型的文件啊,都必须是用户登录之后才允许访问,这就是咱们现在的一个要求。
01:09
哎,要求那么我先建一个工程,先模拟出这样一个环境啊。呃,来吧,咱们再建一个模块。现在这个项目已经很大了,好多模块,所以变得有点卡了,呃,他。咱们这个呢,选他没错啊,没病,然后选怪吧。下一步咱们说这是15_future。点击finish。这模块呢,就创建出来了,那创建出来以后啊,怎么在web这个目录下来整一个目录叫ain目录。哎,在这个目录下呢,有好多类型的文件,比如说HTML啊。哎,小不,哎,那咱们说我是。
02:00
还卡住了,我是a.HTML文件啊,然后呢再来。接着PA点接着P,然后说我是A点接着P文件,甚至呢,我们再给他准备一个图片啊,图片咱们随便拷贝一个。好。过来了,那么大家现在注意看一下哈,我给他配置下它的服务器,呃,上面这些咱们就整个的都不要了。呃,这个咱们要配一下,这是给谁的future用的,咱们说这是15_future。然后部署这边,呃,咱们把这个future后面这一段给它拿掉。好。地址呢,改过来了,呃,咱们说下面这个。热部署啊,咱们这里面是重新部署啊,重新部署好,那么这个时候啊,咱们配置的差不多了哈,咱们点击OK。
03:10
现在呢,咱们先启动这个项目啊,咱们先给它启动一下,走启动一下。稍等啊。让它启动。正在变异。好。然后部署。对吧,看这个输出就知道部署了,稍等。哎,部署成功了,正在启动,那么大家注意看一下哈,我现在呢,访问ain下的a.H看到没有,大家看这是不是能访问到我访问它的a.JSP。是不是也有是吧,我在访问它的这个图片。把这个合上。我在访问他这个图片2.gbg,它也有。
04:00
2.gpg,好,这是不是也都可以啊,也都可以,那是因为什么咱们并没有给它加上权限管理。那么我们希望什么?我们希望这个目录下都必须登录之后才允许访问,那我们就想了,那登录之后有什么不同,怎么区分登录不登录呢?其实我们说过一般情况下啊,就是回忆一下啊,思考根据对吧,之前我们学习。啊,学过的这个内容,我们知道用户登录之后,都会把用户登录的信息保存到session域中,所以要检查用户是否登录,可以判断session中是否包含有用户登录的信息即可,这就是思路了,对吧?嗯,那么在这几种文件当中。
05:10
能够检查session是否登录的,其实就是JP,那么我们可以先在JP页面当中啊,来看一下效果,就比如说我写一段代码啊。写一段代码,那咱们说这个。Session session.get啊,抽表叫做user。呃,那么大家注意看一下哈,接收一下。Usual,那么在这个地方啊,我我们可以判断一下,说如果usual等等于now,这说明什么,如果等于now,说明还没有登录啊,没有登录怎么办呢?我们让它跳到一个登录页面,在外面准备一个登录页面,呃,咱们叫做log in.JP就这个,咱们说这是登录。
06:14
页面login。点JP面就这样子啊,咱们让它跳过来,那这里呢,Request。点get request斜杠。然后后面跟着log in点,接着后面点for what啊,Request。OK,这个呢,就是请求转发了,我们一般请求转发后啊,就不允许再执行任何代码了,所以咱们就就这样。哎,就这样子,那现在咱们注意看一下哈,我们访问这个a.JP我们看看它是不是可以达到我们想要的一个效果,呃,我们在这边a.JP枪回车大家看。
07:08
它是不是跳到这个登录页面呢?因为你没有登录,所以呢,它你已经看不到a.JP这个页面中的内容了,好,那这就是思路。这个就是实现的一个方法是吧,我把这个做法给你拷贝过来,但是有个问题。什么问题啊,大家看一下哈,我们现在用的这种方案。它仅仅大家注意哈,它仅仅只能够用在什么GSP。页面当中能理解吗?为什么?因为只有在GP里面我们才能写这种Java的代码去判断呢?那你说我们在HTML里面怎么写?对吧,就算H项目能写,你不能说这个图片也能写代码吧。所以啊,大家注意啊,这种方案大家注意它有局限性,我们自己去写代码,这种方案它有局限性,那怎么办呢?我们可以使用咱们今天讲的这个future。
08:09
诶,它就可以什么呢,实现这个权限管理,那他怎么做的,我们把这个原理啊稍微说一下,大家注意看一下哈,首先这边是这个客户端浏览器。客户端浏览器,然后大家注意了,这边是什么东西呢?是服务器。就是咱们常说那。好,Come on,那么这个时候啊,那么大家注意一下,注意一下哈,那么我们发请求的时候是什么样子,APP冒号双斜线IP地址端口号,工程路径后面跟的资源路径没错吧,哎,就是这样一个格式,但是大家注意了哈。
09:04
他这个请求过来。走到服务器就请求了吗?然后他会先干嘛,以前呢,是这边有这个资源文件直接就访问了。稍等。啊,这是什么?用户访问的目标资源。目标资源,目标资源都是指哪一些啊,比如说HTML页面呢。然后JSP页面呢,哎,或者说呢,哎,程序啊,PXT文本啊,JPG图片啊,NP4视频啊对吧等等这都算都算就是放在服务器上面供我们可以通过地址访问,都算是自源。
10:00
啊,都算是资源,那么你在请求的时候,服务器会直接访问这个资源,那么如果说我们想要在访问资源之前做一些权限检查怎么办?那么我们可以使用future过滤器,那么future过滤器它的执行啊是在什么这些目标资源访问之前?先执行,大家看一下哈,咱们说这是什么?Future过滤器,Future过滤器,那么我们就可以在future过滤器里面,大家注意看,来检查用户。是否有登录啊,也就是检查权限了哈,也就是检查权限,也就是检查权限,好给咱们了解一下,那这时候无非就两种情况,一种就是什么呢?有权限,一种就是无权限,哎有权限呢,你就放行就行了,放行哎,放行。
11:01
啊,也就是说放行可以理解,为什么就是让程序默认执行是吧,默认执行就让他去哪呢?诶就是他访问这个资源是哪他就去哪好了,那无权限呢,你就可以控制程序的流转,能理解吗?就是你可以指定一个页面,让它跳到登录页面是吧?就是让它跳转到登录页面。或者是不允许其访问是吧,反正都是这么个意思啊,就这么个意思好了,这咱们了解一下啊,这个时候呢,你可以让他再过去能理解吗。你可以让他过去,你也可以让他直接返回。你也可以让他直接返回。不访问没资源是吧,这就是有权限,大家注意哈,有权限啊,这个呢,无权限是吧,你就可以控制了,当然无权限的你也可以让他跳到其他的一些资源,就比如说我给他跳到一个指定的登录页面,那也行,你是可以控制的啊,这就是future,他在目标资源之前执行就可以达到这个权限检查,那么说归说呀,大家还是觉得比较的模糊,那么我们给大家演示一下怎么做呀,注意看哈,我在上面。
12:22
嗯,先建个包,Com点艾特硅谷点future。然后呢,我在里面加一个类叫做in future,呃,然后让他呢,大家注意要实现这个什么future。接口。大家注意啊,谁那个future接口,那么诶我这个future类导错了,他不是这个哈,不是这个先把它拿掉。删了。啊,Future是哪个呢。呃,咱们倒下包是加YS的是这个哈,走。
13:07
OK。大家看哈,这就是咱们的future,你得先写这样一个类去。继承啊,实现这个接口,然后第二步是干嘛呢?在这里面大家看这个方法它很重要,叫做什么呢?Do future方法啊是干嘛呢,专门用于拦截请求过滤响应,那我们这里主要是演示拦截请求啊,主要是演示拦截请求,那么拦截请求之后我们可以干嘛?可以做权限检查。能理解吧,就可以做全身检查了,咱们就在这里面去实现。啊,那实现的内容呢,前列检查就哪些啊,就是我们刚刚这些呀,咱们这代码不就是权限检查的吗?你都可以把它拿过来直接用,没有什么太大问题的。啊,这里面缺一个session是吗?你把这个session取出来就行了,Session怎么获取,咱们看一下哈,Http session。
14:06
等于哎,叫做serve that.get set a,它没有这方法是吧,因为这个类大家看它是serve that request把它强转一下就行了,来一点点来哈,我们先写成no,免得它报错,然后。注意看at serve requestp request等于serve request类型转换,然后使用它来获取这个session就没问题了啊,下面不是需要转发吗?你把这个request复制过来,这个地方request,然后下面是serve response就好了啊,这是什么?这是没有登录的情况,那如果说登录呢,大家看我们就可以让他继续往下走,或者说就放行对吧?继续往下走怎么做叫做train。
15:00
电。来去的是哪个去呢?就是第三个参数啊,叫做future,看见吗。啊,那我回来future,重点do future,哎,把这个request放进来,That response放进来就好了,这个代码就是什么呢?让程序继续往下,哎,访问用户的目标资源,就是用户访问啥,你就让他访问了。这个是放行啊,那咱们了解一下好,那现在咱们写好这个代码之后,他已经有这个权限检查的代码了,但是他还不知道他要对哪些东西进行检查,怎么办呢?你还需要到web点它没有东西配置才行,这个配置啊,就跟咱们前面的serve配置差不多,非常的接近,来咱们看一下哈,首先有一个future标签,然后这里呢是future name。
16:02
哎,还有呢,Future class future class是什么东西啊,In future是吧,那上面呢,跟我们说的差不多,就是配置这个。那咱们说一下这是干啥来呢?Future标签用于配置一个什么future过滤器,那这里呢,给给future起一个名称啊,然后这个地方就什么就配置全类名是吧,然后还要再配个什么东西啊,配置一个拦截路径,它好知道要对哪些东西进行拦截,斜杠大家注意哈,这里我解释一下。都解释一下哈。
17:00
先说这个future making表示啥?啊,配置什么东西呢?Future过滤器的拦截路径,然后这个future令,这个future令跟上面那个令是不同的啊,表示当前的拦截路径给哪个future使用啊,要注意哈,那这个URL pen。是吧,咱们色面不也有吗?就是配置拦截路径,配置拦截路径,那这里呢,我要解释一下斜杠注意哈,斜杠表示请求地址,为什么atv冒号双斜线IP地址端口号,然后工程路径,哎,它就到这个地方啊,跟我们的色一样啊,那么我们蓝的是什么?蓝的就是这个地址下,大家注意这个地址映射到哪,映射到web录,映射到idea。
18:07
Idea的web目录就是这个,看见吗?哎,那咱们要拦截的是谁呀?拦截的是web下的的mean对吧?所以这里还要写上A的mean下的全部怎么办?心心表示全部就这里面全部的资源,就这个意思,好,别着急啊,那这个表示请求地址为就什么东西啊,就是上面这个地址,注意啊,后面跟的呃的面形大概就这个意思,能理解了吗?哎,那么它就是映射到这个地址,映射到哪啊?映射到这里面的in下的全部。啊,全部,那这个时候他就可以工作了,这时候注意看啊,呃,我们在这里打上断点。我们看一看它是不是跟我们这个图中手势的一样,你每个请求进来,它会直接访问这个future,然后再由future决定你是如何流转的是吧,是到这边来呀,还是直接去哪呀,由Q决定来看着哈。
19:06
呃,这是我们要启停了,然后来里第8UG启动啊,又断点了嘛,好,那么我们在这个a.J的P里面,咱们也打印一句话。啊,这样咱们就知道谁先执行谁后执行了吗。咱们说A点接着P页面执行了,就这样哈。好,来,咱们注意看一下,咱们现在访问二段面向的A点,接着P走敲回车。咱们先看看控制台,看看那执行了没有,有看到吗。是不是没有看到这一行打印呢?看见了吗?哎,没有,然后他先来到了哪里呢?注意看,他先来到a me future,因为它已经拦截到,拦截到之后干什么事情啊,第一行代码啊,这一行代码啊,由于这个直播的原因,咱码分辨率调的很低啊,所以这个屏幕就很小,看到代码也很小啊,大家就注意看一下哈,来这个地方他先是做的什么东西啊,呃,先是做的这个。
20:13
类型转换对吧,转换之后呢,它调用这个方法获取session。好,现在就出来了,然后呢,获取用户登录的信息,这时候没有登录,所以它是now,你看见吗?如果它等于now,就说明还没有登录,所以让他怎么转发到登录页面,咱们给他放过去走,那你看这里看到的是啥?这是登录页面,那么至始至终大家看一下下面是不是都没有打印。A点接P页面执行了,看见了吗?这就是权限检查,这个时候不管你访问的是GSP还是HTML还是图片,它都会拦截来请看一下哈,HTML敲回车,它是不是一样拦截到,看见了吗?我先我先清掉哈,它一样拦截到,一样是来做看你没有登录,让你跳到登录页面。
21:08
看见了吗?一样跳到登录页面,那图片呢,图片也不例外啊,2.jpg,但是大家注意。这个地方可能会有一些你想不到的,我敲回车看看哈。是不是出来了。是不是出来了,直接就出来了,诶为啥为啥没有经过这个拦截呢,没停下来呢,大家注意这个图片,咱们昨天说过缓存还记得吗。有缓存,它其实只是通过浏览器直接从缓存里面拿,它根本就没有走服务器,那这时候咋办呢?啊一种呢,是你清掉这个全部的缓存是吧,清掉这些缓存。然后呢,这时候再发一个请求啊走。大家看一眼,是不是还?还转转半天呢。还没过去呢是吧,好,拦截到了,大家看是不是已经停下来了,好一种是清款,昨天找不到了,他过来了哈,走走走走走。
22:01
啊,然后跳到登录页面,这时候看这是不是登录页面了,对吧?哎,这是一种方法去掉缓存,另的方法呢,你可以在后面加请求参数,还记得吧,咱们昨天讲表验证码的时候讲过哈,哎,好,这个是future过滤器的一个基本的应用啊,基本的应用。
我来说两句