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

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

セキュリティ

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

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

  • ビジュアリゼーションのクエリで LIMIT が指定されている場合、データが切り捨てられる可能性があります。
  • ビジュアリゼーションのクエリで FORMAT 句に無効な書式設定パターンがリクエストされた場合。

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

ロギング

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

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