連載
» 2004年05月28日 00時00分 公開

Strutsを使うWebアプリケーション構築術(5):Validatorによる妥当性検証の実現(前編) (1/2)

[山田祥寛,@IT]

 前回「リクエスト情報を制御するアクションフォームBeans」では「書籍登録・更新アプリケーション」を例に、アクションフォームBeansの主要な用法とDynaActionFormによるデータ受け渡しの簡略化について説明しました。今回は、Struts 1.1からの新機能である入力データ検証機能(Validatorプラグイン)について紹介します。

妥当性検証の必要性

 データベースにデータを登録する際、入力されたデータが正しい形式かどうかを検証することは大切なことです。例えば、数値型のpriceフィールドに「百五十」という文字列が入力されたり、50けたまでしか格納できないフィールドに100けたの文字列が入力されたりしてしまうと、データをデータベースに登録しようとした時点でエラーが発生して、その場で停止してしまう可能性もあります。たとえ、その場はたまたま通過したとしても、その後に予期せぬ挙動が発生する恐れもあります。また、このようなアプリケーションの脆弱(ぜいじゃく)性は、悪意のある第三者にサーバへの攻撃を仕掛けやすくする原因ともなってしまいます。

 入力データをあらかじめチェックしておけば、このような問題の多くは未然に防ぐことができます。ただし、これはなかなか容易なことではありません。データ1つ取っても、必須チェック、データ型チェック、文字列長チェック、数値範囲チェックなど、検証しないといけない項目はたくさんあるからです。実装に手間が掛かるのはもちろん、検証ロジックによって本来のロジックが読みづらくなってしまうこともあります。

 しかし、Struts 1.1から導入されたValidatorプラグインを利用すれば、こうした入力フォームのチェックが容易になります。設定ファイルに記述するだけで、フォームの各要素と検証内容、さらにエラー時のメッセージ出力までのマッピングが可能となるのです。アクションクラスやアクションフォームBeansへのコーディングは一切必要ありません。

 例えば、入力されたデータが足りない場合などに、以下の図のようなエラーメッセージを表示し、ユーザーに入力を促すような機能をアプリケーションに実装することができます。

Validatorプラグインによる入力データの検証とエラーメッセージの表示 Validatorプラグインによる入力データの検証とエラーメッセージの表示

 では、Validatorプラグインの具体的な設定方法について説明していきましょう。

Validatorプラグインを有効にする

 Validatorプラグインを有効化し、検証機能を利用できるようにするためには、まずコンフィグレーションファイル(struts-config.xml)に以下のように設定します。

struts-config.xml
<?xml version="1.0" encoding="Shift_JIS" ?>
<!DOCTYPE struts-config PUBLIC
          "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
          "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
<struts-config>
  ...中略...
  <action-mappings>
    ...中略...
    <action path="/BookWriteAction" type="struts.BookUpdateProcess"
      name="BookUpdateForm" scope="request"
      input="/chap04/BookUpdate.jsp" validate="true">
      <forward name="success" path="/BookViewAction.do" />
    </action>
  </action-mappings>
  <message-resources parameter="ApplicationResources" />
  <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
    <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" />

  </plug-in>
</struts-config>

 検証機能を利用するために追加したのは、以下の3カ所です。

(1)plug-in要素

 検証機能を実装するValidatorプラグインをロードします。標準的な検証機能を利用するだけなら、plug-in要素におけるclassName属性の値を変更する必要はありません。

 plug-in要素のset-property子要素では、Validatorプラグインを利用するに当たって必要なプロパティ値の設定を行います。pathnamesプロパティは、Validatorプラグインの設定ファイルへのパスをカンマ区切りで記述します。ここで指定されている検証基本情報ファイル(validator-rules.xml)は、Strutsが標準で提供するファイルで、このファイルの変更が必要になるときはあまりないでしょう。本連載第1回の内容に従って関係ファイルを配置しているなら、すでに/WEB-INFフォルダ内に配置されているはずです。

 検証設定ファイル(validation.xml)は、個々のフォーム要素に対して適用する検証の種類、検証時に必要なパラメータ、エラーメッセージなどのマッピングを行います。この検証設定ファイルは、開発者自身が定義して使用します。なお、本稿では/WEB-INFフォルダ内にvalidation.xmlという名前で配置していますが、set-property要素の設定を変更すれば、格納先やファイル名を任意に変更することができます。

注意:ただし、validation.xmlのような設定ファイルは/WEB-INFフォルダ(もしくはその下の任意のサブフォルダ)内に配置すべきです。これは、/WEB-INFフォルダ以外に配置されているファイルは、クライアントのWebブラウザから直接参照されてしまう危険性があるからです。

(2)action要素

 該当のアクションで、「サーバサイド」の検証機能を利用するかどうかを決定します。サーバサイドの検証機能を有効にする場合には、validate属性の値として“true”を設定します。ただし、validate属性の値を“false”に指定しても、「クライアントサイド」の検証機能は無効にはなりません。また、input属性にはエラーが発生した場合の戻り先となるURLを指定しておきます。

参考:クライアント側における検証機能の有効/無効は、「.jsp」ファイル内のhtml:javascript要素で決定されます。従って、クライアント側の検証機能を無効にしたい場合は、「.jsp」ファイルからhtml:javascript要素を削除する必要があります。これらの詳細については、次回に説明します。

(3)message-resources要素

 Strutsにおけるエラーメッセージは、「プロパティファイル」(詳細は後述)と呼ばれる別のテキストファイルで管理されています。message-resources要素には、Strutsアプリケーションが参照するプロパティファイルを宣言するので、parameter属性値にはプロパティファイルのベース名(拡張子を除いた部分)を指定してください。

       1|2 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。