springboot過濾器和攔截器的實(shí)例代碼
攔截器與過濾器
在講Spring boot之前,我們先了解一下過濾器和攔截器。這兩者在功能方面很類似,但是在具體技術(shù)實(shí)現(xiàn)方面,差距還是比較大的。在分析兩者的區(qū)別之前,我們先理解一下AOP的概念,AOP不是一種具體的技術(shù),而是一種編程思想。在面向?qū)ο缶幊痰倪^程中,我們很容易通過繼承、多態(tài)來解決縱向擴(kuò)展。 但是對(duì)于橫向的功能,比如,在所有的service方法中開啟事務(wù),或者統(tǒng)一記錄日志等功能,面向?qū)ο蟮氖菬o法解決的。所以AOP——面向切面編程其實(shí)是面向?qū)ο缶幊趟枷氲囊粋€(gè)補(bǔ)充。而我們今天講的過濾器和攔截器都屬于面向切面編程的具體實(shí)現(xiàn)。而兩者的主要區(qū)別包括以下幾個(gè)方面:
1、Filter是依賴于Servlet容器,屬于Servlet規(guī)范的一部分,而攔截器則是獨(dú)立存在的,可以在任何情況下使用。
2、Filter的執(zhí)行由Servlet容器回調(diào)完成,而攔截器通常通過動(dòng)態(tài)代理的方式來執(zhí)行。
3、Filter的生命周期由Servlet容器管理,而攔截器則可以通過IoC容器來管理,因此可以通過注入等方式來獲取其他Bean的實(shí)例,因此使用會(huì)更方便。
過濾器
@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 { // 實(shí)現(xiàn)HandlerInterceptor 或者 繼承HandlerInterceptorAdapter都可以,如果想看著簡(jiǎn)潔就使用后者 @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 { } }
到此這篇關(guān)于springboot過濾器和攔截器的文章就介紹到這了,更多相關(guān)springboot過濾器和攔截器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBoot 過濾器、攔截器、監(jiān)聽器對(duì)比及使用場(chǎng)景分析
- SpringBoot實(shí)現(xiàn)攔截器、過濾器、監(jiān)聽器過程解析
- SpringBoot實(shí)現(xiàn)過濾器、攔截器與切片的實(shí)現(xiàn)和區(qū)別
- 詳談springboot過濾器和攔截器的實(shí)現(xiàn)及區(qū)別
- SpringBoot全局異常處理機(jī)制和配置攔截器方式
- SpringBoot實(shí)現(xiàn)全局異常處理方法總結(jié)
- SpringBoot配置GlobalExceptionHandler全局異常處理器案例
- Springboot全局異常捕獲及try catch區(qū)別解析
- Springboot?過濾器、攔截器、全局異常處理的方案處理小結(jié)
相關(guān)文章
詳解java如何實(shí)現(xiàn)帶RequestBody傳Json參數(shù)的GET請(qǐng)求
在調(diào)試Fate平臺(tái)時(shí),遇到了一個(gè)奇葩的接口類型,該接口為Get方式,入?yún)⑹且粋€(gè)json類型在body中傳遞,使用body中傳參的話為什么不用POST請(qǐng)求而使用了GET請(qǐng)求,下面我們就來深入研究一下2024-02-02java實(shí)現(xiàn)創(chuàng)建臨時(shí)文件然后在程序退出時(shí)自動(dòng)刪除文件
這篇文章主要介紹了java實(shí)現(xiàn)創(chuàng)建臨時(shí)文件然后在程序退出時(shí)自動(dòng)刪除文件,從個(gè)人項(xiàng)目中提取出來的,小伙伴們可以直接拿走使用。2015-02-02java Swing實(shí)現(xiàn)選項(xiàng)卡功能(JTabbedPane)實(shí)例代碼
這篇文章主要介紹了java Swing實(shí)現(xiàn)選項(xiàng)卡功能(JTabbedPane)實(shí)例代碼的相關(guān)資料,學(xué)習(xí)java 基礎(chǔ)的朋友可以參考下這個(gè)簡(jiǎn)單示例,需要的朋友可以參考下2016-11-11Spring中BeanFactory與FactoryBean接口的區(qū)別詳解
這篇文章主要給大家介紹了關(guān)于Spring中BeanFactory與FactoryBean接口的區(qū)別的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者使用Spring具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03java 判斷一個(gè)數(shù)是否為2的整數(shù)次冪方法
今天小編就為大家分享一篇java 判斷一個(gè)數(shù)是否為2的整數(shù)次冪方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-07-07