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
    在這裏插入圖片描述

到此,攔截器就實現成功了。

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