W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
攔截器從上到下依次分為 Global、Inject、Class、Method 四個(gè)層次,Clear 用于清除自身 所處層次以上層的攔截器。
Clear 聲明在 Method 層時(shí)將針對 Global、Inject、Class 進(jìn)行清除。Clear 聲明在 Class 層時(shí) 將針對 Global、Inject 進(jìn)行清除。Clear 注解攜帶參數(shù)時(shí)清除目標(biāo)層中指定的攔截器。
l 共有 Global、Inject、Class、Method 四層攔截器
l 清除只針對 Clear 本身所處層的向上所有層,本層與下層不清除
l 不帶參數(shù)時(shí)清除所有攔截器,帶參時(shí)清除參數(shù)指定的攔截器
在某些應(yīng)用場景之下,需要移除 Global 或 Class 攔截器。例如某個(gè)后臺管理系統(tǒng),配置了 一個(gè)全局的權(quán)限攔截器,但是其登錄 action 就必須清除掉她,否則無法完成登錄操作,以下是 代碼示例:
// login方法需要移除該權(quán)限攔截器才能正常登錄
@Before(AuthInterceptor.class)
public class UserController extends Controller {
// AuthInterceptor 已被Clear清除掉,不會被其攔截
@Clear
public void login() {
}
// 此方法將被AuthInterceptor攔截
public void show() {
}
}
Clear 注解帶有參數(shù)時(shí),能清除指定的攔截器,以下是一個(gè)更加全面的示例:
@Before(AAA.class)
public class UserController extends Controller {
@Clear
@Before(BBB.class)
public void login() {
// Global、Class級別的攔截器將被清除,但本方法上聲明的BBB不受影響
}
@Clear({AAA.class, CCC.class})// 清除指定的攔截器AAA與CCC
@Before(CCC.class)
public void show() {
// 雖然Clear注解中指定清除CCC,但她無法被清除,因?yàn)榍宄僮髦会槍τ诒緦右陨系母鲗? }
}
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: