springboot過濾器和攔截器的實例代碼

攔截器與過濾器

  在講Spring boot之前,我們先瞭解一下過濾器和攔截器。這兩者在功能方面很類似,但是在具體技術實現方面,差距還是比較大的。在分析兩者的區別之前,我們先理解一下AOP的概念,AOP不是一種具體的技術,而是一種編程思想。在面向對象編程的過程中,我們很容易通過繼承、多態來解決縱向擴展。 但是對於橫向的功能,比如,在所有的service方法中開啟事務,或者統一記錄日志等功能,面向對象的是無法解決的。所以AOP——面向切面編程其實是面向對象編程思想的一個補充。而我們今天講的過濾器和攔截器都屬於面向切面編程的具體實現。而兩者的主要區別包括以下幾個方面:

  1、Filter是依賴於Servlet容器,屬於Servlet規范的一部分,而攔截器則是獨立存在的,可以在任何情況下使用。

  2、Filter的執行由Servlet容器回調完成,而攔截器通常通過動態代理的方式來執行。

  3、Filter的生命周期由Servlet容器管理,而攔截器則可以通過IoC容器來管理,因此可以通過註入等方式來獲取其他Bean的實例,因此使用會更方便。

過濾器

@Component
public class AddResponseHeaderFilter extends OncePerRequestFilter {
    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {

        String header = response.getHeader("Set-Cookie");
        Collection<String> headerNames = response.getHeaderNames();
        System.out.println("___________________");
        System.out.println(header);
        System.out.println("___________________");
        filterChain.doFilter(request, response);
    }
}

攔截器

public class HttpResponseInterceptorHandler implements HandlerInterceptor {
    // 實現HandlerInterceptor  或者 繼承HandlerInterceptorAdapter都可以,如果想看著簡潔就使用後者
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        response.addHeader("content-test","123");
        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 {

    }
}

到此這篇關於springboot過濾器和攔截器的文章就介紹到這瞭,更多相關springboot過濾器和攔截器內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: