什麼是過濾器?
一個 HTTP 請求,過濾器是第一組被執行的對象。同適配器不同的是,一個請求中,可以執行多個過濾器。
如何使用過濾器?
通過 @Filters 註解。
註解 '@Filters' 的值是一個 '@By' 註解的數組,它可以聲明在這三個地方
- 入口函數
- 子模塊
- 主模塊
其中入口函數的 @Filters 優先級更高,其次是子模塊,最後是主模塊。
就是說,你在入口模塊聲明瞭兩個過濾器:
@Filters({@By(type=Filter1.class), @By(type=Filter2.class)})
public final class MainModule{
...
在某一個入口函數上聲明瞭一個空的過濾器數組:
...
@At
@Filters
public String myFunction(){
...
那麼,這個入口函數將不會應用任何過濾器。
使用內置過濾器
@Filters(@By(type=CheckSession.class, args={"user", "/login.jsp"}))
CheckSession 是 Nutz.Mvc 爲你內置的一個唯一的過濾器,它的構造函數需要兩個參數:
- 檢查 session 的什麼屬性?
- 如果不存在,重定向到哪裏?
定製你自己的過濾器
定製你自己的過濾器,請注意過濾器接口代碼:
public interface ActionFilter {
View match(ActionContext context);
}
根據 HttpRequest 對象,過濾器需要決定返回值是:
- 一個 View : 這個請求有問題,不要繼續執行了,馬上用這個 View 來渲染 HTTP 輸出流吧
- null : 恩,這個請求沒問題,繼續吧。
如果過濾器返回的是 null,Nutz.Mvc 會繼續執行下一個過濾器,如果全部的過濾器都返回 null 它就會調用適配器,進行後面的操作。