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!
推薦閱讀:
- SpringBoot 過濾器與攔截器實例演示
- 詳解SpringMVC的攔截器鏈實現及攔截器鏈配置
- Spring攔截器和過濾器的區別在哪?
- 簡單總結SpringMVC攔截器的使用方法
- SpringBoot實現過濾器攔截器的耗時對比