SpringMvc-实现拦截器

拦截器

拦截器是类似于过滤器的一个概念,其功能和过滤器一致,其主要概念不再赘述,想要了解的读者可以查看博主关于Filter的文章

下面演示SpringMvc拦截器的使用。

环境搭建和博主的上一篇文章一致,这里不再赘述。

直接创建一个HelloController类作为处理器:

package com.ara.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class HelloController {

    @RequestMapping("/hello")
    @ResponseBody
    public String hello(){
        System.out.println("Hello");
        return "hello";
    }

    @RequestMapping("/world")
    @ResponseBody
    public String world(){
        System.out.println("world");
        return "world";
    }
    
    @RequestMapping("/ara")
    @ResponseBody
    public String ara(){
       System.out.println("ara");
       return "ara";
    }

}

现在我们就想着有一个拦截器,拦截除了/hello的所有请求。

自定义一个拦截器MyInterceptor,这里采用实现HandlerInterceptor接口的方式:

package com.ara.config;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class MyInterceptor implements HandlerInterceptor {

    /**
     * 该方法在拦截前执行
     * @param request 请求的request
     * @param response 响应
     * @param handler 请求的处理器
     * @return 返回是否放行 true:放行   false:不放行
     * @throws Exception
     */
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

        System.out.println("处理请求前的代码..........");

        return true;
    }

    /**
     * 该方法在请求处理完成后执行
     * @param request 处理之后的request
     * @param response 响应给客户端的response对象
     * @param handler 请求的处理器
     * @param modelAndView 处理后返回的模型和视图对象
     * @throws Exception
     */
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("处理器处理完请求后的代码.........");
    }

    /**
     * 该方法主要做一些清理工作 在拦截请求全部完成后执行
     * @param request 请求的request对象
     * @param response 响应的response对象
     * @param handler 执行请求的处理器
     * @param ex 异常对象
     * @throws Exception
     */
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("清理工作........");
    }
}

这时,我们还要将该拦截器配置在Spring中,即在spring-mvc.xml文件中添加如下配置:

<!--拦截器配置-->
<mvc:interceptors>
    <mvc:interceptor>
        <!--包括这个请求下面的所有请求-->
        <mvc:mapping path="/**"/>
        <!--除了这个请求的所有请求-->
        <mvc:exclude-mapping path="/hello"/>
        <!--配置处理的拦截器-->
        <bean class="com.ara.config.MyInterceptor"/>
    </mvc:interceptor>
</mvc:interceptors>

现在就配置完毕了,我们开始测试,分别访问/hello、/world和/ara,其控制台结果如下:

  • /hello
    在这里插入图片描述
  • /world
    在这里插入图片描述
  • /ara
    在这里插入图片描述

到此,拦截器就实现成功了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章