JFinal Online Manual
/ Clear
Clear
攔截器從上到下依次分為 Global、Inject、Class、Method 四個層次,Clear 用于清除自身 所處層次以上層的攔截器。
Clear 聲明在 Method 層時將針對 Global、Inject、Class 進(jìn)行清除。Clear 聲明在 Class 層時 將針對 Global、Inject 進(jìn)行清除。Clear 注解攜帶參數(shù)時清除目標(biāo)層中指定的攔截器。
Clear 用法記憶技巧:
l 共有 Global、Inject、Class、Method 四層攔截器
l 清除只針對 Clear 本身所處層的向上所有層,本層與下層不清除
l 不帶參數(shù)時清除所有攔截器,帶參時清除參數(shù)指定的攔截器
在某些應(yīng)用場景之下,需要移除 Global 或 Class 攔截器。例如某個后臺管理系統(tǒng),配置了 一個全局的權(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ù)時,能清除指定的攔截器,以下是一個更加全面的示例:
@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)榍宄僮髦会槍τ诒緦右陨系母鲗? } }