1秽褒、Filter
過(guò)濾器
? 過(guò)濾器是處于客戶端與服務(wù)器資源文件之間的一道過(guò)濾網(wǎng)壶硅,在訪問(wèn)資源文件之前,通過(guò)一系列的過(guò)濾器對(duì)請(qǐng)求進(jìn)行修改销斟、判斷等庐椒,把不符合規(guī)則的請(qǐng)求在中途攔截或修改。也可以對(duì)響應(yīng)進(jìn)行過(guò)濾蚂踊,攔截或修改響應(yīng)约谈。
過(guò)濾器一般用于登錄權(quán)限驗(yàn)證、資源訪問(wèn)權(quán)限控制犁钟、敏感詞匯過(guò)濾棱诱、字符編碼轉(zhuǎn)換等等操作,便于代碼重用涝动,不必每個(gè)servlet中還要進(jìn)行相應(yīng)的操作迈勋。
項(xiàng)目中的應(yīng)用:
2、Interceptor
攔截器是在面向切面編程中應(yīng)用的捧存,就是在你的service或者一個(gè)方法前調(diào)用一個(gè)方法粪躬,或者在方法后調(diào)用一個(gè)方法。是基于JAVA的反射機(jī)制昔穴。
攔截器镰官,在AOP(Aspect-Oriented Programming)中用于在某個(gè)方法或字段被訪問(wèn)之前,進(jìn)行攔截吗货,然后在之前或之后加入某些操作泳唠。攔截是AOP的一種實(shí)現(xiàn)策略。
Interceptor是spring框架自己帶的攔截器宙搬,它可以拿到處理的Controller和拿到處理的方法 但是拿不到具體的請(qǐng)求參數(shù)笨腥。
攔截器(Interceptor)和過(guò)濾器(Filter)的執(zhí)行順序
過(guò)濾前-攔截前-Action處理-攔截后-過(guò)濾后
3、Aspect
使用環(huán)繞通知勇垛,切入要切入的類脖母,當(dāng)請(qǐng)求的時(shí)候回?cái)r截下來(lái),這樣可以獲取攔截的方法的參數(shù)
? ? 總結(jié):? 過(guò)濾器和攔截器的區(qū)別闲孤,過(guò)濾器是依賴于servlet容器(struts)谆级,在實(shí)現(xiàn)上基于函數(shù)回調(diào),可以對(duì)幾乎所有的請(qǐng)求進(jìn)行過(guò)濾。但缺點(diǎn)是一個(gè)過(guò)濾器實(shí)例只能在容器初始化時(shí)調(diào)用一次肥照,來(lái)進(jìn)行過(guò)濾操作脚仔,獲得我們想要的數(shù)據(jù)。
三者之間主要還是粒度的差異舆绎,應(yīng)用場(chǎng)景的不同鲤脏。
過(guò)濾器(Filter):可以拿到原始的http請(qǐng)求,但是拿不到你請(qǐng)求的控制器和請(qǐng)求控制器中的方法的信息吕朵。
攔截器(Interceptor):可以拿到你請(qǐng)求的控制器和方法猎醇,卻拿不到請(qǐng)求方法的參數(shù)。
切片? (Aspect)? ? ? :? 可以拿到方法的參數(shù)努溃,但是卻拿不到http請(qǐng)求和響應(yīng)的對(duì)象
后面項(xiàng)目中我們可以使用Aspect來(lái)記錄我們的業(yè)務(wù)日志姑食。具體使用:
在controller處增加注解
具體代碼查看logaspect.java
————————————————
版權(quán)聲明:本文為CSDN博主「hejianop」的原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議茅坛,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明音半。
原文鏈接:https://blog.csdn.net/hejianop/article/details/83655540