處理安全性、錯誤、警告和記錄

本節包含下列主題:

安全性

資料來源可在以下兩種存取模式中運作:

  • 在限制存取模式 (根據預設) 中,資料來源只會處理資料來源與資料來源所在網域發出的要求。受限模式可防止跨網站偽造要求 (XSRF) 攻擊,因此比無限制存取模式更加安全。由於資料來源程式庫所提供的介面只能傳回資料,無法變更伺服器端的狀態或資料,因此只能採用試圖竊取資料的 XSRF 攻擊。為了防止資料來源遭到竊取,受限制模式必須與 Cookie 型驗證搭配使用。驗證使用者的方式取決於您的環境和實作方式。

  • 在無限制存取模式下,無論來源為何,資料來源都會處理所有要求。在無限制模式下執行的資料來源,可能受到 Cookie 型驗證的保護,但請注意,資料來源將容易遭受 XSRF 攻擊。如果圖表位於資料來源網域外的網頁需要存取資料來源,或是資料位於公有領域而不需要保護,請使用無限制模式。

視覺化要求可指定 JSON、CSV 或 HTML 的回應格式。回應格式會決定資料來源傳回資料表的格式。由於 CSV 和 HTML 格式不受 XSRF 攻擊,因此即使在受限模式下,仍可從其他網域存取。

如要指定無限制模式,請按照下列方式覆寫 isRestrictedAccessMode()

  @Override
  protected boolean isRestrictedAccessMode() {
    return false;
  }

為求簡單起見,程式庫提供的所有範例都會以無限制存取模式執行。

錯誤和警告

如果無法或希望傳回有效的資料表,程式庫會擲回 DataSourceException。例如,無法驗證使用者。當程式庫發生錯誤,因而無法建立資料表時,就會擲回這些例外狀況。因此,建議您在資料來源特有的情況下擲回例外狀況。如果是的話,請沿用 DataSourceException 類別,自行建立錯誤例外狀況類型。您也可以直接擲回 DataSourceException 類別。

DataSourceException 類別位於 base 套件中,該類別會採用下列參數:

  • ReasonType 
    此為必要參數。可用原因類型已在 ReasonType 列舉中定義。如果所有可用原因類型都不適合,您可以使用 OtherInternal
     
  • MessageToUser 
    這個參數定義錯誤訊息的文字。在大多數情況下,都會以工具提示的形式向使用者顯示,因此請勿加入技術或機密資訊。

您可以使用 datasource.DataSourceHelper 中的一組輔助函式來處理錯誤。在此情況下,呼叫兩個名稱相同的 setErrorServletResponse 的函式以採用 DataSourceException,並設定資料 ++ 回應的錯誤。其中一個函式接受資料來源要求,另一個函式會採用 HttpServlet request,如果無法建立 DataSourceRequest,就會使用這個函式。如需實作範例,請參閱定義功能和事件流程

如果無法傳回資料表,程式庫會傳回錯誤。如果可以傳回資料表,但回報有問題,程式庫就會連同資料表傳回警告。舉例來說,程式庫會在下列情況建立警告:

  • 表示查詢視覺化提供的 LIMIT 導致資料遭到截斷。
  • 表示查詢視覺化呈現在 FORMAT 子句中要求無效的格式模式。

如要自行新增警告,請建立 base.Warning 的例項,並使用 addWarning() 方法將其新增至資料表。

記錄

程式庫會使用雅加達常用記錄功能。雅加達通用記錄可以用於您可能已有的常見記錄系統。如果您的記錄系統非標準,您可能需要編寫轉接器。詳情請參閱 Jakarta 常用記錄首頁

擲回例外狀況的資訊會傳送至記錄。存取記錄的方式取決於您使用的記錄系統。