1. 程式人生 > >玩轉springboot:實現springboot自定義攔截器

玩轉springboot:實現springboot自定義攔截器

一、前言

在javaee中,我們經常使用filter來做攔截器,後來有了springmvc,我們使用HandlerInterceptor進行攔截,springmvc的攔截器檢視這篇文章,現在有了springboot,我們使用HandlerInterceptor進行攔截,但是我們不用xml的配置,省了很多的事情。

二、springboot攔截器使用

1、設定攔截器
/**
 * @author 歐陽思海
 * @date 2018/7/26 10:08
 * 攔截器測試
 */
public class TestInterceptor implements HandlerInterceptor
{
//目標方法執行之前 @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { if(true){ System.out.println("已經進行攔截了。。。。。。。。"); return false; } return
true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws
Exception { } }

這裡如果攔截成功,會輸出:

已經進行攔截了。。。。。。。。
2、攔截器註冊

在springmvc的時候,我們這裡使用的是xml進行配置的,但是,在springboot中,我們使用java配置,具體用法如下:

//使用WebMvcConfigurerAdapter可以來擴充套件SpringMVC的功能
//@EnableWebMvc   不要接管SpringMVC
@Configuration
public class MyMvcConfig extends WebMvcConfigurerAdapter {

    //註冊攔截器2
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
         /*addPathPatterns 用於新增攔截規則
         excludePathPatterns 使用者排除攔截*/
        registry.addInterceptor(new TestInterceptor()).addPathPatterns("/**")
                .excludePathPatterns("/index.html", "/", "/user/login");
    }
}

解釋:

上面攔截器的註冊,首先,我們使用addPathPatterns("/**")添加了所有的都攔截。

然後,在使用excludePathPatterns("/index.html", "/", "/user/login")index.html和/user/login兩個url設定不攔截。

注意註冊時的區別

registry.addInterceptor(getInterfaceAuthCheckInterceptor()).addPathPatterns("/api/**"):這種方式無論什麼情況都可以

registry.addInterceptor(new InterfaceAuthCheckInterceptor()).addPathPatterns("/api/**"):這種情況時,自定義的interceptor中不能注入其他內容,比如redis或者其他service,如果要注入,必須使用上面這種方法

下面我們寫個controller進行測試。

3、controller測試
/**
 * @author 歐陽思海
 * @date 2018/7/25 9:57
 */
@Controller
public class HelloworldController {
    @ResponseBody
    @RequestMapping("/hello")
    public String hello(){
        return "Hello World!";
    }
}

後臺輸出結果:
這裡寫圖片描述

已經進行攔截了。。。。。。。。

攔截器使用完畢!