00:00
好了,问题我们已经总结出来了,那我们该如何解决呢?其实我们这两个问题,它都是对于我们当前用户的权限呢,进行的一个什么限制,也就意味着我们没有控制好,那我们也就意味着当你的用户的请求啊,我必须除了菜单以外,还要额外的进行控制,尤其是我们首先应该判断它有没有登录,如果登录的话,你有没有对应的权限,所以啊,不仅仅是菜单,还有我们的请求的路径啊好,那我这里呢,我们准备来增加一些特殊的对象来解决这个问题,那我们如何来解决呢?我们这里使用啊,我们的spring,它提供的一个叫intercept。啊,叫拦截器,拦截器就可以解决这两个问题,为什么它可以把我们用户的请求拦截住,拦截住以后判断它是合法还是不合法的,合法让你继续访问,不合法就不让你访问了,所以啊,我们接下来准备来使用拦截器啊,那么这个拦截器我们该如何来使用呢?首先我们在web项目当中。
01:18
来,我们在这里,我建一,诶这里有个web,咱们就在这里面吧,点击new,然后创建class,那么这个class呢,我们分两个,为什么呢?一个是跟登录相关的拦截器,一个是跟权限相关的拦截器,我们叫做log in intercept。诶,好了,然后写完之后,你随便写个类就能叫拦截器了吗?不是,我们要实现特定的接口或继承特定类,我们这里呢,第一个我们先来,咱们叫handler intercept,实现特定的接口,然后我们这个接口当中,我们这里呢,会有三个方法需要我们去什么重写,那么但是呢,我们要了解这个方法的作用分别是什么,所以啊,我写上,那咱们叫登陆拦截器啊。
02:11
那么首先第一个叫handle,这个从字面含义上来讲,它是在我们的控制器执行之前来做一些逻辑处理,所以我们写上啊,咱们说在。我们的控制器执行之前啊,完成业务逻辑操作,嗯,逻辑操作,那这个逻辑操作呀,它需要什么返回一个布尔类型的,那么这个布尔类型有什么用呢?是这样的,如果你返回force的话,那么业务逻辑就不会继续执行,他不会走到控制器里面。如果你为处就可以走到控制器里面,所以啊,我们写上叫方法的返回值,方法的返回值它决定我们的逻辑是否继续执行啊,那么如果是true啊,它表示自表示啊,继续执行啊,然后呢,如果是force,它表述的是什么呢?返回就是不再继续执行啊,它是表示它不再继续执行。
03:19
哎,就是这个意思啊,好了。那这个呢,我们大概的了解了一下,接下来我们再往下看,下面叫post handle,它表述的含义呢,是在我们控制器执行完,啊,控制器它执行完毕之后。啊,之后他执行的逻辑操作啊。就是说呀,你在我的控制器controller执行完成之后呢,诶就走这个方法,而这个方法呢,就不会影响我们控制器的执行了,它就没有true和false了啊还有这个这个是啥意思呢?它叫after comp,在我完成之后完成什么,完成试图的渲染,所以呢,我们写上啊,在完成我们试图渲染之后,它执行此方法啊,执行此方法。
04:19
啊,然后呢,去做一些逻辑操作,所以啊,我们的三个方法它有不同的用途,但是我们要做的呢,是登陆的拦截器,就意味着如果你没登录,连控制器都不让你执行,那所以呢,我们应该在这个方法当中完成我的逻辑操作,所以啊,我在这里我们写上一下啊来,那我这该如何来写呢?我就得判断一下了,来咱们写上叫判断当前的登录啊,或者叫当前的嗯,用户它是否已经登录,那我怎么知道你当前有没有登录呢?很简单,我要知道你登录之前和登录之后的变化,那比方说你登录之前,那我点击按钮之后,那我就登录了,那这个时候会在session里面保存用户信息,那么也就意味着我完全可以判断session里面有没有用户信息,有你就登录了。
05:20
没有你就没有登录啊,所以我首先我可以这么来做,先把拿到手。啊,拿拿过来啊,咱们写上叫session,好,它等于啊来,我们写上session等于request.get我们的session,嗯,好了,你拿到了以后,我说了,我要判断一下我们当前的登录用户是否存在,所以session.get attribute啊,那我来看一看吧,来咱们看看,咱们叫做do阿贾克斯,哎,这边有个叫login,所以我叫login啊好,那么这里呢,我就写上了啊,然后给它放过来,我们叫啊,咱们就叫login,嗯,等于,但是你得到的这个值可能确实是不存在呀,那你不存在的话,我就if了,嗯,好,如果logie它等于,那说明你当前根本就没有session的数据,那说明你根本就没有登录。
06:27
那你没有登录的话,你就应该返回了,或者说不能往下执行了,你不能往下的话,那我要从定向到我们的登录页面,所以response点啊,Response点啊,我们在这里给它send redirect,好,我们写上咱们叫斜杠log啊,咱们去到登录就可以了。那如果你要是这个地方它不等于空呢?你不等于空说明你当前的请求是合法的,那如果是合法的话,我直接return true不也就行了吗?让你继续访问可以了啊。所以我们当前的这个操作应该是没有什么太多问题的,就是判断session当中的用户信息。
07:16
可是啊,你光写完一个类,它肯定是不能够被我们的框架所识别的,所以我还需要在我们的配置文件当中把它配好了,所以啊,我们往下来,我们在这里写上叫括号MVC啊,然后我们叫intercept。好,加个S表示多的意思,那么里面我们就可以写了,咱们叫MVC啊,咱们的interceptor啊,好写完以后反过来,嗯,接下来我们再接着往下写,写下面呢,就是我们的一个映射关系,或者写个B,这都可以啊。然后呢,这里我们增加它的映射关系,来我们的MVC冒号埋ping,然后pass啊,我们等于叫做斜杠星星,它表述的含义呢,就是所有的请求都会走这个拦截器,然后我们再来写上一个B啊来,然后呢,Class啊,等于它就可以了啊,然后那这个就是我刚才写的它呀,嗯,把它拿过来拷贝。
08:30
然后放到这个位置啊点,然后把它拿过来,嗯,拷贝拷贝之后我放到这个位置就可以了啊嗯,行了,写完这个,我们接下来还要准备点东西,为什么呢?因为我们的一些静态资源呢,它这个地方不应该被拦截,因为静态资源首先它肯定是不会需要登录的,还有登录页面怎么需要登录呢。还有一个就是我们的这个操作叫do阿贾克斯音,如果你都没有走这一步的话,你怎么可能往里面放数据,不可能,所以啊,有些路径是不能被拦截的,我们要把它排除去,所以监括号MVC啊,咱们冒号咱们写上这里呢,我们叫做排除吧,嗯。
09:22
嗯,好了啊,然后写上咱们叫mapping。好啊,然后呢,我们写上叫pass pass呢就是我们斜杠啊,我们的登陆这个我们是不能够被拦截的,因为没有用,再来还有一个就是我们刚才看到的这个叫do啊,贾克斯log in,因为它如果被拦截的话,你根本就没有办法去到我们的是吧,登录,那它永远就回到了登录页面,这是不对的,还有啊,就是这些静态资源了,那我这里呢,就是一块儿给他全写了吧,嗯,好,那我这里呢,写上啊来,呃,我们叫boop,嗯,斜杠星星啊拷贝。
10:13
然后我们这里呢,都给它加上CSS啊,然后呢,我们的嗯,S。然后接下来啊,我们这里呢,是image image。嗯,这里是我们的j query,还有我们的layer。那这里呢,就是我们的script了,嗯,好script,嗯,下面还有一个叫啊,所以把我们拿过来。嗯,好了啊,行了,写完以后这个呢,我们试一试,现在呢,我们把咱们这个服务器给它来重启一下啊,看一看对不对,首先保证我们的服务器启动没有问题,再说启动。
11:00
好了,我们启动完成以后,那我现在同学们看一看啊,我现在没有登录,为什么呢?因为服务器重新启动了,里面的session它重新分配了,那我现在写上叫local host,我直接写上个men,这个men是主页面,那你没登录的话,你过去应该是不对的,所以我回车,回车以后大家看怎么了,他去到了我们的登陆,对吧,但是我们这儿有点问题啊,我稍微的改一改啊,咱们这个地方出现问题了,出现了个什么问题呢?就是我们这个重定向的这个位置呀,有点问题,我们这里啊直接log in了,但是我们缺少了项目的名称,所以我这里应该怎么写呢?咱们应该这么写,嗯,我们写上叫son.get.get context pass,把这个拿过来啊,咱们写上咱们叫pass啊,等于然后呢,我的这个位置应该就是我们的。
12:00
再加上log in了,嗯,咱们应该这么写,再把那个项目的名给它加上了啊好,那我现在把它停掉,然后重新启动啊。这个重新起。重新启动以后,那我现在呢后退啊,我们准备还是去访问那个页面啊。好了,启动完了,那我现在这个叫我们at cloud founding,我们叫做men回车,回车以后大家可以看到没有问题了啊,他去到了我的登录页面,因为你没登录是不能过去的,这是对的啊好,这个问题我们算是解决了。
我来说两句