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

本節包含下列主題:

安全性

資料來源可在兩種存取模式中運作,如下所示:

  • 受限存取模式 (預設為預設) 僅針對來自資料來源所屬網域的網域發送要求。受限模式可防止跨網站偽造要求 (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 並在資料 Servlet 回應上設定錯誤。其中一個函式接受資料來源要求,另一個使用 HttpServlet request,且會在無法建立 DataSourceRequest 時使用。以下是定義功能和流程的範例實作。

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

  • 假如查詢視覺化功能提供的 LIMIT 導致資料遭到截斷,
  • 而查詢視覺化要求在 FORMAT 子句中要求無效的格式模式時。

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

記錄

程式庫使用 Jakarta 的共同紀錄。Jakarta 的通用記錄可和您已採用的常見記錄系統搭配使用。如果您的記錄系統採用非標準,可能需要撰寫轉接程式。詳情請參閱 Jakarta 通用紀錄首頁

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