`

SpringMVC(十六)_使用拦截器

阅读更多

       前言:本篇主要介绍SpringMVC的拦截器机制

 1. 自定义拦截器

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

public interface HandlerInterceptor {

    /**
     * 这个方法在业务处理器处理请求之前被调用,在该方法中对用户请求 request 进行处理。
     * 如果程序员决定该拦截器对请求进行拦截处理后还要调用其他的拦截器,或者是业务处理器去
     * 进行处理,则返回true;如果程序员决定不需要再调用其他的组件去处理请求,则返回false。
     */
    default boolean preHandle(HttpServletRequest request, 
                              HttpServletResponse response, 
                              Object handler) throws Exception {
        return true;
    }
    
    /**
     * 这个方法在业务处理器处理完请求后,但是DispatcherServlet 向客户端返回响应前被调用
     * 在该方法中对用户请求request进行处理。
     */
    default void postHandle(HttpServletRequest request, 
                            HttpServletResponse response, 
                            Object handler, 
                            @Nullable ModelAndView modelAndView) throws Exception {
    }
    
    /**
     * 这个方法在 DispatcherServlet 完全处理完请求后被调用,可以在该方法中进行一些资源清理的操作。
     */
    default void afterCompletion( HttpServletRequest request, 
                                  HttpServletResponse response, 
                                  Object handler, 
                                  @Nullable Exception ex) throws Exception {
    }

}

 

2. 拦截器方法执行顺序


3. 配置拦截器

<mvc:interceptors>
    <!-- 配置自定义的拦截器. -->
    <bean class="com.wj.web.interceptors.FirstInterceptor"></bean>
    <!-- 配置拦截器的路径 -->
    <mvc:interceptor>
        <mvc:mapping path="/views/*"/>
        <!-- 配置拦截器(不)作用的路径 -->
        <mvc:exclude-mapping path="/views/getMap.action"/>
        <bean class="com.wj.web.interceptors.SecondInterceptor"></bean>
    </mvc:interceptor>
</mvc:interceptors>

      此拦截器的执行顺序为:


    若第二个拦截器preHandle方法校验不通过,返回false,则拦截器的执行顺序为:


 

4. 拦截器实现

       FirstInterceptor:

public class FirstInterceptor implements HandlerInterceptor{

    /**
     * 该方法在目标方法之前被调用.
     * 若返回值为 true, 则继续调用后续的拦截器和目标方法. 
     * 若返回值为 false, 则不会再调用后续的拦截器和目标方法. 
     * 
     * 可以考虑做权限. 日志, 事务等. 
     */
    @Override
    public boolean preHandle(HttpServletRequest request,
            HttpServletResponse response, Object handler) throws Exception {
        System.out.println("【FirstInterceptor】 preHandle");
        return true;
    }

    /**
     * 调用目标方法之后, 但渲染视图之前. 
     * 可以对请求域中的属性或视图做出修改. 
     */
    @Override
    public void postHandle(HttpServletRequest request,
            HttpServletResponse response, Object handler,
            ModelAndView modelAndView) throws Exception {
        System.out.println("【FirstInterceptor】 postHandle");
    }

    /**
     * 渲染视图之后被调用. 释放资源
     */
    @Override
    public void afterCompletion(HttpServletRequest request,
            HttpServletResponse response, Object handler, Exception ex)
            throws Exception {
        System.out.println("【FirstInterceptor】 afterCompletion");
    }

}

      SecondInterceptor:

public class SecondInterceptor implements HandlerInterceptor{

    /**
     * 该方法在目标方法之前被调用.
     * 若返回值为 true, 则继续调用后续的拦截器和目标方法. 
     * 若返回值为 false, 则不会再调用后续的拦截器和目标方法. 
     * 
     * 可以考虑做权限. 日志, 事务等. 
     */
    @Override
    public boolean preHandle(HttpServletRequest request,
            HttpServletResponse response, Object handler) throws Exception {
        System.out.println("【SecondInterceptor】 preHandle");
        return true;
    }

    /**
     * 调用目标方法之后, 但渲染视图之前. 
     * 可以对请求域中的属性或视图做出修改. 
     */
    @Override
    public void postHandle(HttpServletRequest request,
            HttpServletResponse response, Object handler,
            ModelAndView modelAndView) throws Exception {
        System.out.println("【SecondInterceptor】 postHandle");
    }

    /**
     * 渲染视图之后被调用. 释放资源
     */
    @Override
    public void afterCompletion(HttpServletRequest request,
            HttpServletResponse response, Object handler, Exception ex)
            throws Exception {
        System.out.println("【SecondInterceptor】 afterCompletion");
    }

}

 

代码下载来源:http://super-wangj.iteye.com/blog/2388430

  • 大小: 25.1 KB
  • 大小: 31.4 KB
  • 大小: 43 KB
分享到:
评论

相关推荐

    SpringMVC Demo_java_springmvc_DEMO_

    9. **拦截器**:通过实现`HandlerInterceptor`接口或使用`@Interceptor`注解,可以创建自定义拦截器,执行请求处理前后的逻辑,比如登录检查、日志记录等。 10. **测试**:SpringMVC提供测试支持,可以通过`MockMvc...

    Java实训教程 Java软件开发实战 Java开发框架介绍 SpringMVC_10_拦截器 共7页.pptx

    ### Java实训教程知识点详解——SpringMVC拦截器 #### 一、SpringMVC概述与应用场景 SpringMVC作为Spring框架中的一个模块,主要用于构建Web应用。它是一个基于MVC(Model-View-Controller)设计模式的轻量级框架...

    Java实训教程 Java软件开发实战 Java开发框架SpringMVC介绍 共10个章节.rar

    【课程大纲】 SpringMVC_1_开发环境搭建 共41页.pptx SpringMVC_2_HelloWorld 共19页.pptx SpringMVC_3_方法入参 共41页.pptx SpringMVC_4_方法返回值 共25页.pptx ...SpringMVC_10_拦截器 共7页.pptx

    SpringMVC PPT_springmvc_

    SpringMVC 的拦截器(Interceptor)允许在请求处理前后执行自定义逻辑,例如登录检查、日志记录、性能监控等。拦截器通过 HandlerInterceptor 接口实现。 九、数据绑定与验证 SpringMVC 提供了自动的数据绑定功能,...

    springmvc4_springmvc_mainlyyb8_

    拦截器允许我们在请求处理之前或之后进行拦截操作,例如登录检查、性能监控等。 10. **RESTful 风格的支持** 使用 `@RestController` 注解,我们可以轻松创建 RESTful API,处理 JSON 或 XML 数据。`@RequestBody...

    防止SpringMVC拦截器拦截js等静态资源文件的解决方法

    在本文中,我们讨论了三种解决SpringMVC拦截器拦截静态资源文件的方法,并对这些方法的优劣进行了分析。 方案一是在拦截器中排除静态资源路径。在SpringMVC的配置文件中(通常是spring-mvc.xml),可以通过配置元素...

    mc.rar_springMVC mybatis_springmvc

    5. **拦截器(Interceptor)**:可以定义一系列预处理和后处理操作,增强系统的功能和安全性。 MyBatis是一个轻量级的持久层框架,它简化了数据库操作,提供了SQL与Java代码的直接映射。MyBatis的核心功能包括: 1...

    demo_SpringMVC.rar_+SpringMVC demo_DEMO_spring mvc_spring mvc de

    2. **spring-servlet.xml**: 定义 Spring MVC 的配置,如视图解析器、拦截器、数据源、事务管理器等。 3. **Maven build**: 使用 Maven 编译项目,打包成 WAR 文件后,可以部署到支持 Servlet 的应用服务器(如 ...

    springMVC拦截器项目

    在这个项目中,你可以了解到如何配置和使用拦截器,以及如何将它们集成到 SpringMVC 应用中。 1. **SpringMVC 概述**: SpringMVC 提供了一个模型-视图-控制器架构,用于处理 HTTP 请求和响应。它简化了 MVC 应用...

    企业级开发-SpringMVC使用拦截器实现用户登录权限验证实验报告.docx

    - 如何配置 SpringMVC 框架以使用自定义拦截器。 - 如何在 Web 应用的部署描述符(`web.xml`)中配置 DispatcherServlet。 这些知识是构建企业级应用的基础,对于理解 SpringMVC 框架的工作原理和提高安全性至关...

    SpringMVC中使用Interceptor拦截器

    本篇文章将深入探讨如何在Spring MVC中使用Interceptor拦截器。 首先,Interceptor的实现需要继承自`HandlerInterceptor`接口或者实现`HandlerInterceptorAdapter`适配器类,这两个类都包含三个核心方法: 1. `...

    Java入门必学实训教程 Java软件开发实战 Java基础、开发框架、类库、web开发 已分类全套共50多份PPT课件.rar

    SpringMVC_10_拦截器 SpringMVC_2_HelloWorld SpringMVC_3_方法入参 SpringMVC_4_方法返回值 SpringMVC_5_常用注解 SpringMVC_6_数据校验 SpringMVC_7_国际化 SpringMVC_8_标签库 SpringMVC_9_文件上传 struts2_1_...

    SpringMVC中的拦截器-拦截器方法的作用和执行顺序.avi

    SpringMVC中的拦截器-拦截器方法的作用和执行顺序.avi

    SpringMVC3.0_Demo

    通过这两个目录中的文件,我们可以学习到如何配置SpringMVC 3.0的拦截器、视图解析器、控制器等组件,以及如何利用JPA进行数据库操作,实现CRUD(创建、读取、更新、删除)功能。此外,还可以看到如何将两者结合,...

    springmvc传值对象及拦截器

    在给出的压缩包文件`springmvc_006`中,可能包含了Spring MVC项目中关于传值对象和拦截器的示例代码。通过分析和学习这些代码,开发者可以更直观地理解这两个概念的实现细节,以及如何在实际项目中运用它们。 总的...

    Java实训教程 Java软件开发实战 Java开发框架介绍 SpringMVC_8_标签库 共39页.pptx

    ### Java实训教程知识点...通过这份详细的教程,读者不仅能够系统地学习SpringMVC的基本原理和使用方法,还能够深入了解一些高级特性,如国际化、文件上传和拦截器等。这对于Java Web开发者来说是一份非常宝贵的资料。

    SpringMVC-12 拦截器

    通过这个教程“SpringMVC-12-Interceptor”,你将能够掌握Spring MVC中拦截器的使用,包括创建自定义拦截器、配置拦截器以及理解多个拦截器的执行顺序。这将使你有能力在实际项目中灵活运用拦截器来实现各种业务需求...

    01_springmvc基础_1

    **拦截器 Interceptors**:拦截器允许你在请求被处理之前或之后执行自定义逻辑,比如权限检查、日志记录等。`HandlerInterceptor` 接口用于实现拦截器。\n\n7. **数据绑定与验证**:Spring MVC 提供了强大的数据...

    01_springmvc基础_2

    12. **拦截器(Interceptor)**:Spring MVC 提供了拦截器机制,可以在请求被处理前或处理后执行自定义逻辑,如登录检查、日志记录等。 13. **异常处理**:通过 @ExceptionHandler 或统一异常处理类,可以优雅地...

    01_springmvc基础_3

    - 使用 `@Order` 注解可以控制拦截器的执行顺序。 8. **异常处理(ExceptionHandler)** - 可以在控制器中定义 `@ExceptionHandler` 方法,捕获和处理特定的异常。 - 这提供了集中处理异常的机会,使代码更整洁...

Global site tag (gtag.js) - Google Analytics