SpringBoot使用攔截器


SpringBoot的攔截器只能攔截流經DispatcherServlet的請求,對於自定義的Servlet無法進行攔截。
SpringMVC中的攔截器有兩種:HandlerInterceptor和WebMvcInterceptor。這兩個接口都定義了請求之前、請求之中、請求之后三個函數,以HandlerInterceptor為例進行說明:

  • public boolean preHandle(HttpServletRequest req, HttpServletResponse httpServletResponse, Object o)
  • public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView)
  • public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e)

HandlerInterceptor的函數返回值都是boolean,一旦返回false,就不再處理這個請求,所以它真正具有攔截功能。而WebMvcInterceptor作用只是進行初始化,它的三個函數都是void類型的。

要想使用HandlerInterceptor需要如下幾個步驟:

實現HandlerInterceptor接口

public class MyInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest req, HttpServletResponse httpServletResponse, Object o) throws Exception { 
    }

    @Override
    public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {

    }

    @Override
    public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {

    }
}

添加Configureation

過去可以用xml配置,現在更傾向於用java代碼配置

@Configuration
public class MyWebMvcConfigurer extends WebMvcConfigurerAdapter {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**");
        super.addInterceptors(registry);
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM