`

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...

    SpringMVC PPT_springmvc_

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

    springmvc4_springmvc_mainlyyb8_

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

    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使用拦截器实现用户登录权限验证实验报告

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

    本篇文章主要介绍了防止SpringMVC拦截器拦截js等静态资源文件的解决方法,具有一定的参考价值,有兴趣的同学可以了解一下

    SpringMVC中使用Interceptor拦截器

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

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

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

    SpringMVC3.0_Demo

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

    springmvc传值对象及拦截器

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

    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` 方法,捕获和处理特定的异常。 - 这提供了集中处理异常的机会,使代码更整洁...

    springmvc19_day01_02.zip

    `&lt;mvc:annotation-driven&gt;`元素开启基于注解的配置,`&lt;bean&gt;`定义视图解析器、拦截器等。 10. **测试支持** SpringMVC提供了`MockMvc`类,允许在没有实际服务器环境的情况下进行单元测试和集成测试,通过`@WebApp...

    SSM.rar_springmvc SSM_ssm

    4. **配置SpringMVC**:设置处理器映射器、视图解析器、拦截器等。 5. **配置MyBatis**:定义数据源、SqlSessionFactoryBuilder、Mapper接口等。 6. **编写Mapper接口和XML**:实现数据库操作。 7. **编写Service和...

    SpringMVC 中的拦截器与异常处理

    在SpringMVC框架中,拦截器(Interceptor)和异常处理是两个重要的概念,它们对于构建健壮、可维护的Web应用程序至关重要。本文将深入探讨这两个主题,并解释它们如何协同工作以提升应用性能和用户体验。 首先,让...

    Springmvc登录拦截器Demo

    本文将深入探讨如何使用Spring MVC的拦截器实现登录验证,并提供相关知识点。 1. **Spring MVC 拦截器简介** Spring MVC的拦截器是基于Servlet的Filter的一种扩展,它允许开发者在请求被控制器处理之前或之后执行...

Global site tag (gtag.js) - Google Analytics