SpringMVC拦截器的使用

金歌  金牌会员 | 2024-4-17 14:57:49 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 930|帖子 930|积分 2790

SpringMVC中的拦截器主要用于拦截控制器方法的执行。
SpringMVC配置拦截器

SpringMVC中的拦截器需要实现HandlerInterceptor接口
  1. public class FirstInterceptor implements HandlerInterceptor {
  2.    //该方法是在控制器方法执行前执行
  3. <mvc:interceptors>
  4.     <bean />
  5. </mvc:interceptors>@Override
  6. <mvc:interceptors>
  7.     <bean />
  8. </mvc:interceptors>public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
  9. <mvc:interceptors>
  10.     <bean />
  11. </mvc:interceptors><mvc:interceptors>
  12.     <bean />
  13. </mvc:interceptors>System.out.println("FirstInterceptor->preHandle");
  14. <bean  id="firstInterceptor"/>
  15. <mvc:interceptors>
  16.         <ref bean="firstInterceptor"/>
  17. </mvc:interceptors>//返回false执行拦截,true放行
  18. <mvc:interceptors>
  19.     <bean />
  20. </mvc:interceptors><mvc:interceptors>
  21.     <bean />
  22. </mvc:interceptors>return HandlerInterceptor.super.preHandle(request,response,handler);
  23. <mvc:interceptors>
  24.     <bean />
  25. </mvc:interceptors>}
  26.    //该方法是在控制器方法执行后执行
  27. <mvc:interceptors>
  28.     <bean />
  29. </mvc:interceptors>@Override
  30. <mvc:interceptors>
  31.     <bean />
  32. </mvc:interceptors>public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
  33. <mvc:interceptors>
  34.     <bean />
  35. </mvc:interceptors><mvc:interceptors>
  36.     <bean />
  37. </mvc:interceptors>System.out.println("FirstInterceptor->postHandle");
  38. <mvc:interceptors>
  39.     <bean />
  40. </mvc:interceptors>}
  41.    //该方法是在视图渲染后执行
  42. <mvc:interceptors>
  43.     <bean />
  44. </mvc:interceptors>@Override
  45. <mvc:interceptors>
  46.     <bean />
  47. </mvc:interceptors>public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
  48. <mvc:interceptors>
  49.     <bean />
  50. </mvc:interceptors><mvc:interceptors>
  51.     <bean />
  52. </mvc:interceptors>System.out.println("FirstInterceptor->after");
  53. <mvc:interceptors>
  54.     <bean />
  55. </mvc:interceptors>}
  56. }
复制代码
拦截器中三个默认方法说明:
preHandle:控制器方法执行之前执行preHandle(),其boolean类型的返回值表示是否拦截或放行,返回true为放行,即调用控制器方法;返回false表示拦截,即不调用控制器方法。
postHandle:控制器方法执行之后执行postHandle()。
afterComplation:处理完视图和模型数据,渲染视图完毕之后执行afterComplation()
SpringMVC的拦截器三种配置方式

方式1:使用bean标签
  1. <mvc:interceptors>
  2.     <bean />
  3. </mvc:interceptors>
复制代码
方式2:引入外部bean
  1. <bean  id="firstInterceptor"/>
  2. <mvc:interceptors>
  3.         <ref bean="firstInterceptor"/>
  4. </mvc:interceptors>
复制代码
方式3:使用注解方式

将拦截器的实现类注入到spring容器中
  1. @Component //将实现类注入到容器中
  2. public class FirstInterceptor implements HandlerInterceptor {}
复制代码
开启组件扫描
  1. [/code]配置拦截器
  2. [code]<bean  id="firstInterceptor"/>
  3. <mvc:interceptors>
  4.         <ref bean="firstInterceptor"/>
  5. </mvc:interceptors><bean  id="firstInterceptor"/>
  6. <mvc:interceptors>
  7.         <ref bean="firstInterceptor"/>
  8. </mvc:interceptors>
复制代码
结论:
以上三种方式:都是对所有请求进行拦截
bean标签和ref标签配置的拦截器默认对DispatcherServlet处理的所有的请求进行拦截或放行。
排除指定的拦截请求
  1. <mvc:interceptors>
  2.     <bean />
  3. </mvc:interceptors><mvc:interceptors>
  4.     <bean />
  5. </mvc:interceptors><mvc:interceptors>
  6.     <bean />
  7. </mvc:interceptors><mvc:interceptors>
  8.     <bean />
  9. </mvc:interceptors><mvc:interceptors>
  10.     <bean />
  11. </mvc:interceptors><mvc:interceptors>
  12.     <bean />
  13. </mvc:interceptors><mvc:interceptors>
  14.     <bean />
  15. </mvc:interceptors><mvc:interceptors>
  16.     <bean />
  17. </mvc:interceptors><mvc:interceptors>
  18.     <bean />
  19. </mvc:interceptors><mvc:interceptors>
  20.     <bean />
  21. </mvc:interceptors><mvc:interceptors>
  22.     <bean />
  23. </mvc:interceptors><mvc:interceptors>
  24.     <bean />
  25. </mvc:interceptors><mvc:interceptors>
  26.     <bean />
  27. </mvc:interceptors><mvc:interceptors>
  28.     <bean />
  29. </mvc:interceptors><mvc:interceptors>
  30.     <bean />
  31. </mvc:interceptors>  
复制代码
多个拦截器的执行顺序

通过观察源码:
1、若每个拦截器的preHandle()都返回true,则多个拦截器的执行顺序是按照在SpringMVC配置文件的配置顺序执行。
说明:
preHandle()会按照配置的顺序执行(由上而下),而postHandle()和afterComplation()会按照配置的反序执行(由下而上)。
2、若多个拦截器中的某个拦截器的preHandle()返回false。preHandle()返回false和它之前的拦截器的preHandle()都会执行,postHandle()都不执行,返回false的拦截器之前的拦截器的afterComplation()会执行。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

金歌

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表