各位小伙伴
咱们继续学习新知识
今天要分享的就是
拦截器
不知道小伙伴们平时上网的时候有没有注意到,尤其是上网购物的时候,不登录账号,就无法访问一些功能页面,比如你不登录账号,就没法查看购物车里面有什么物品.这就是拦截器起到的作用.那么今天我们就来给之前的项目添加一个拦截器.
拦截器
拦截器的概念
SpringMVC 中的 Interceptor 拦截器的主要作用就是拦截用户的 url 请求,并在执行 handler 方法的前中后加入某些特殊请求,类似于 servlet 里面的过滤器.
开发拦截器
定义一个拦截类,实现 HandlerInterceptor 接口,这里面一共有三个方法,
preHandle 方法:
在 handler 方法执行之前,运行里面的代码,可以用于用户的登录验证.
postHandle 方法:
在 handler 方法执行中,返回 ModelAndView 之前运行里面的代码,可以向页面提供共用的数据.
afterCompletion 方法:
在 handler 方法执行之后,运行里面的代码,可以进行异常处理,计算执行时间,记录日志.
在 springmvc.xml 里面配置拦截器
运行一下,页面有点丑就不展示了,直接看后台控制台的输出内容,可以看出我们的三个方法的运行顺序,和我们之前说的是一样的.
下面我们来测试多个拦截器的运行效果,再编写一个拦截器,(其实就是之前的代码复制一下,改个名字.)
千万不要忘了要配置springMVC.xml
发布项目,查看控制台的输出内容
注意:
1)当 preHandler 方法返回 false 时,其余的的两个方法都不执行,而且 handler 也不会执行
2)拦截器里面的 preHandler ,postHandler 和 afterCompletion 方法是按顺序依次执行的
3)当有多个拦截器存在时,如果有任意一个拦截器的 preHandler 方法返回 false ,则剩下的都不执行
4)如果多个拦截器同时运行(preHandler方法返回true),那么 preHanlder 方法是按顺序执行,而其余两个方法(postHandler 和 afterCompletion)是倒序执行
5)拦截器的执行顺序是按照在 springmvc 配置文件中的位置来顺序执行的
拦截器实战
需求:
只有登陆的用户才有权限访问系统中的功能
思路:
1)在登陆成功后,将用户信息放入 session.
2)编写用户登录拦截器的代码,获取 session 中的 loginName,若 loginName 不为空则证明用户成功登陆,preHandle 方法返回 true ,否则返回 false.
在这里要注意一下,开放 login.do 的 url 访问权限,不然就没法验证用户登录,没法把用户信息保存到 session 中.
配置 springMVC.xml
除了登陆验证的 url 请求,其他 url 请求,在拦截器的 preHandler 方法里面判断 session 是否有用户信息,如果有,则放行通过,如果没有 ,跳转到登陆页面,提示用户登陆.
各位小伙伴
今天的分享就到这里了
拜拜