Nutz-過濾器

什麼是過濾器?

一個 HTTP 請求,過濾器是第一組被執行的對象。同適配器不同的是,一個請求中,可以執行多個過濾器。


如何使用過濾器?

通過 @Filters 註解。

註解 '@Filters' 的值是一個 '@By' 註解的數組,它可以聲明在這三個地方

  1. 入口函數
  2. 子模塊
  3. 主模塊

 其中入口函數的 @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 它就會調用適配器,進行後面的操作。

 

取至:http://www.nutzam.com/core/mvc/action_filter.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章