セキュリティ、エラー、警告、ロギングの処理

このセクションでは、次の項目について説明します。

セキュリティ

データソースは、次の 2 つのアクセスモードのいずれかで動作します。

  • デフォルトでアクセスが制限されているモードでは、データソースと同じドメインから送信されたリクエストのみがデータソースによって提供されます。制限付きモードを使用すると、クロスサイト リクエスト フォージェリ(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 列挙型で定義されます。利用可能な理由タイプのいずれにも該当しない場合は、Other または Internal を使用できます。
     
  • MessageToUser
    このパラメータは、エラー メッセージのテキストを定義します。ほとんどの場合、ツールチップとしてユーザーに表示されます。したがって、技術情報や機密情報を含めないことが重要です。

datasource.DataSourceHelper のヘルパー関数のセットを使用して、エラーを処理できます。この場合、同じ名前の 2 つの関数を呼び出し、どちらも setErrorServletResponse を指定して DataSourceException を取得し、データ サーブレットのレスポンスにエラーを設定します。これらの関数の 1 つはデータソース リクエストを受け取り、もう 1 つは HttpServlet request を受け取り、DataSourceRequest の作成に失敗した場合に使用されます。実装例については、機能とイベントフローの定義をご覧ください。

データテーブルを返すことができない場合は、ライブラリからエラーが返されます。データテーブルを返すことができるが、報告が問題がある場合は、データテーブルとともに警告が返されます。たとえば、次のような状況では警告が作成されます。

  • クエリを可視化して LIMIT を実行すると、データが切り捨てられます。
  • クエリ ビジュアリゼーションが FORMAT 句で無効なフォーマット パターンをリクエストする場合。

独自の警告を追加するには、base.Warning のインスタンスを作成し、addWarning() メソッドを使用してデータテーブルに追加します。

ロギング

このライブラリは、ジャカルタの共通要素ロギングを使用しています。ジャカルタの共通ロギングは、すでにデプロイされている一般的なロギング システムで使用できます。ロギング システムが標準以外の場合は、アダプタの作成が必要になることがあります。詳細については、Jakarta Commons Logging ホームページをご覧ください。

例外がスローされると、情報がログに送信されます。ログへのアクセス方法は、使用するロギング システムによって異なります。