springboot過(guò)濾器和攔截器的實(shí)例代碼
攔截器與過(guò)濾器
在講Spring boot之前,我們先了解一下過(guò)濾器和攔截器。這兩者在功能方面很類似,但是在具體技術(shù)實(shí)現(xiàn)方面,差距還是比較大的。在分析兩者的區(qū)別之前,我們先理解一下AOP的概念,AOP不是一種具體的技術(shù),而是一種編程思想。在面向?qū)ο缶幊痰倪^(guò)程中,我們很容易通過(guò)繼承、多態(tài)來(lái)解決縱向擴(kuò)展。 但是對(duì)于橫向的功能,比如,在所有的service方法中開(kāi)啟事務(wù),或者統(tǒng)一記錄日志等功能,面向?qū)ο蟮氖菬o(wú)法解決的。所以AOP——面向切面編程其實(shí)是面向?qū)ο缶幊趟枷氲囊粋€(gè)補(bǔ)充。而我們今天講的過(guò)濾器和攔截器都屬于面向切面編程的具體實(shí)現(xiàn)。而兩者的主要區(qū)別包括以下幾個(gè)方面:
1、Filter是依賴于Servlet容器,屬于Servlet規(guī)范的一部分,而攔截器則是獨(dú)立存在的,可以在任何情況下使用。
2、Filter的執(zhí)行由Servlet容器回調(diào)完成,而攔截器通常通過(guò)動(dòng)態(tài)代理的方式來(lái)執(zhí)行。
3、Filter的生命周期由Servlet容器管理,而攔截器則可以通過(guò)IoC容器來(lái)管理,因此可以通過(guò)注入等方式來(lái)獲取其他Bean的實(shí)例,因此使用會(huì)更方便。
過(guò)濾器
@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ò)濾器和攔截器的文章就介紹到這了,更多相關(guān)springboot過(guò)濾器和攔截器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBoot 過(guò)濾器、攔截器、監(jiān)聽(tīng)器對(duì)比及使用場(chǎng)景分析
- SpringBoot實(shí)現(xiàn)攔截器、過(guò)濾器、監(jiān)聽(tīng)器過(guò)程解析
- SpringBoot實(shí)現(xiàn)過(guò)濾器、攔截器與切片的實(shí)現(xiàn)和區(qū)別
- 詳談springboot過(guò)濾器和攔截器的實(shí)現(xiàn)及區(qū)別
- SpringBoot全局異常處理機(jī)制和配置攔截器方式
- SpringBoot實(shí)現(xiàn)全局異常處理方法總結(jié)
- SpringBoot配置GlobalExceptionHandler全局異常處理器案例
- Springboot全局異常捕獲及try catch區(qū)別解析
- Springboot?過(guò)濾器、攔截器、全局異常處理的方案處理小結(jié)
相關(guān)文章
Nacos啟動(dòng)出現(xiàn)failed to req API:/nacos/v1/ns/insta
這篇文章主要介紹了Nacos啟動(dòng)出現(xiàn)failed to req API:/nacos/v1/ns/instance after all servers問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08
java設(shè)計(jì)模式—靜態(tài)代理模式(聚合與繼承方式對(duì)比)
下面小編就為大家?guī)?lái)一篇java設(shè)計(jì)模式—靜態(tài)代理模式(聚合與繼承方式對(duì)比)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-05-05
springboot項(xiàng)目中統(tǒng)一時(shí)間格式處理方法
JacksonConfiguration主要用于配置JSON的序列化和反序列化,而LocalDateTimeFormatter則用于處理請(qǐng)求和響應(yīng)中的LocalDateTime格式,這兩個(gè)配置項(xiàng)在SpringBoot項(xiàng)目中至關(guān)重要,確保數(shù)據(jù)格式的正確處理和傳輸2024-10-10
解決子線程無(wú)法訪問(wèn)父線程中通過(guò)ThreadLocal設(shè)置的變量問(wèn)題
這篇文章主要介紹了解決子線程無(wú)法訪問(wèn)父線程中通過(guò)ThreadLocal設(shè)置的變量問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07
java中treemap和treeset實(shí)現(xiàn)紅黑樹(shù)
這篇文章主要為大家詳細(xì)介紹了java中treemap和treeset實(shí)現(xiàn)紅黑樹(shù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11
分析Java非阻塞算法Lock-Free的實(shí)現(xiàn)
非阻塞算法一般會(huì)使用CAS來(lái)協(xié)調(diào)線程的操作。雖然非阻塞算法有諸多優(yōu)點(diǎn),但是在實(shí)現(xiàn)上要比基于鎖的算法更加繁瑣和負(fù)責(zé)。本文將會(huì)介紹兩個(gè)是用非阻塞算法實(shí)現(xiàn)的數(shù)據(jù)結(jié)構(gòu)。2021-06-06
Java圖片讀取ImageIO.read()報(bào)錯(cuò)問(wèn)題及解決
在使用imageio庫(kù)讀取圖片時(shí),如果路徑中包含中文,可能會(huì)導(dǎo)致讀取失敗,解決方法是將路徑中的中文字符進(jìn)行轉(zhuǎn)義處理,可以使用ImageUtil.java工具類進(jìn)行路徑轉(zhuǎn)義,從而避免錯(cuò)誤,這是一個(gè)常見(jiàn)問(wèn)題,希望本文的解決方案能幫助到遇到相同問(wèn)題的開(kāi)發(fā)者2024-10-10

