SpringMVC_拦截器

╰+哭是因爲堅強的太久メ 2022-05-18 09:38 380阅读 0赞

一、拦截器

1、自定义拦截器

SpringMVC 也可以使用拦截器对请求进行拦截处理,用户可以自定义拦截器来实现特定的功能,自定义的拦截器必须实现 HandlerInterceptor接口

继承 HandlerInterceptor 实现一个拦截器

  • preHandle():这个方法在业务处理器处理请求之前被调用,在该方法中对用户请求 request 进行处理。如果程序员决定该拦截器对请求进行拦截处理后还要调用其他的拦截器,或者是业务处理器去进行处理,则返回true;如果程序员决定不需要再调用其他的组件去处理请求,则返回false。
  • postHandle():这个方法在业务处理器处理完请求后,但是 DispatcherServlet 向客户段返回响应前被调用,在该方法中对用户请求的request进行处理。
  • afterCompletion():这个方法在 DispatcherServlet 完全处理完请求后被调用,可以在该方法中进行一些资源清理的操作。
  1. public class SecondInterceptor implements HandlerInterceptor {
  2. /**
  3. * 该方法在目标方法之前被调用,
  4. * 若返回值为true,则继续调用后续的拦截器和目标方法
  5. * 若返回值为false,则不会继续调用后续的拦截器和目标方法
  6. *
  7. * 可以考虑做权限、日志、事务
  8. */
  9. @Override
  10. public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
  11. System.out.println("preHandle");
  12. return true;
  13. }
  14. /**
  15. * 调用目标方法之后,渲染视图之前被调用
  16. *
  17. * 可以对请求域中的属性或视图做出修改
  18. *
  19. */
  20. @Override
  21. public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
  22. System.out.println("postHandle");
  23. }
  24. /**
  25. * 渲染视图之后被调用
  26. * 释放资源
  27. */
  28. @Override
  29. public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
  30. System.out.println("afterCompletion");
  31. }
  32. }

在配置文件中注册:

  1. <mvc:interceptors>
  2. <!--配置自定义拦截器-->
  3. <bean class="com.smart.util.FirstInterceptor"/>
  4. <!--配置LocalChangeInterceptor-->
  5. <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"/>
  6. </mvc:interceptors>

70

其他配置:

  1. <mvc:interceptors>
  2. <!--配置自定义拦截器-->
  3. <bean class="com.smart.util.FirstInterceptor"/>
  4. <!--配置拦截器(不)作用于指定的路径-->
  5. <mvc:interceptor>
  6. <mvc:mapping path="/emps"/>
  7. <bean class="com.smart.util.SecondInterceptor"/>
  8. </mvc:interceptor>
  9. <!--配置LocalChangeInterceptor-->
  10. <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"/>
  11. </mvc:interceptors>

2、多个拦截方法的执行顺序

70 1

也就是说preHandle是顺序执行,postHandle和afterCompletion是倒序执行的。

发表评论

表情:
评论列表 (有 0 条评论,380人围观)

还没有评论,来说两句吧...

相关阅读

    相关 SpringMVC:拦截

    简介: 拦截器本身并不重要,但在源码中很重要。 拦截器用于拦截请求,用于在处理器执行前进行预处理或者处理执行完进行尾处理。 其作用类似于过滤器,不同的是过滤器是ser

    相关 springmvc拦截

    1. springmvc拦截器使用和原理理解 1.1 作用 与struts2类似,springmvc的拦截器主要作用也是在服务端真正处理请求前后进行一些相关的操作