springmvc拦截器相关配置
之前的老项目比较老,里面的拦截器是通过一个servlert实现Filter类来实现的,项目重构的时候没办法,只能改成springmvc的拦截器啦,这东西也是网上一搜一大把,就不在多扯了,直接进入正题。
一.先说说拦截器的作用吧
1、日志记录:记录请求信息的日志,以便进行信息监控、信息统计、计算PV(Page View)等。
2、权限检查:如登录检测,进入处理器检测检测是否登录,如果没有直接返回到登录页面;
3、性能监控:有时候系统在某段时间莫名其妙的慢,可以通过拦截器在进入处理器之前记录开始时间,在处理完后记录结束时间,从而得到该请求的处理时间(如果有反向代理,如apache可以自动记录);
4、通用行为:读取cookie得到用户信息并将用户对象放入请求,从而方便后续流程使用,还有如提取Locale、Theme信息等,只要是多个处理器都需要的即可使用拦截器实现。
5、OpenSessionInView:如Hibernate,在进入处理器打开Session,在完成后关闭Session。
…………本质也是AOP(面向切面编程),也就是说符合横切关注点的所有功能都可以放入拦截器实现
二、下面直接开始铺代码
springmvc的拦截器是实现HandlerInterceptor类来实现的,拦截器可以配置多个,实现该类后要实现父类的三个方法

如果配置了多个拦截器那么执行循序将是这样的

三、接下来来看看springmvc的xml配置

到这里有个问题来了,如果是静态的资源,那么如果被springmvc拦截器拦截了,怎么破(反正我故意想被拦截 都没被springmvc的拦截器拦到我的静态资源路径,似乎只拦截接口路径一样,我也不明白,看了网上说的一堆一堆的,都没用,晕)
如果不希望自己的静态资源被拦截,那么可以在web.xml里面去配置,把静态资源交给tomcat去管理
(项目中WEB-INF目录下面的静态资源访问不到不是因为拦截器作用,而是为了安全性,浏览器一般无法直接访问,只能通过重定向后才可以访问)

四,测试接口

五、测试结果
我们先输入获取用户信息的接口,因为此时session中还没有值,所以表示用户还没登陆,会在拦截器拦截到后,转发到登陆页面



接着我们按照正常流程来,做一次登陆



主要看控制台打印结果(好像handler执行之前的方法忘了打印log信息了,实在抱歉)

好了,差不多拦截器就到这里了,做个笔记也方便自己复习,不喜勿喷,希望对你有用!