【3/18〜】Amazon、VMwareが語る『クラウドの未来』 スラッシュドット    はてなブックマーク  Yahoo!ブックマークに登録  印刷



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



山田祥寛

2004/5/28

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

妥当性検証の必要性

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

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

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

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

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

 INDEX

第5回 Validatorによる妥当性検証の実現(前編)
Page1
妥当性検証の必要性
 
Validatorプラグインを有効にする
  Page2
プロパティファイルを定義する
validation.xmlを定義する



「Strutsを使うWebアプリケーション構築術」

ホワイトペーパーTechTargetジャパン

Java Solution フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

スキルアップ/キャリアアップ(JOB@IT)

- PR -
- PR -

お勧め求人情報

キャリアアップ 〜JOB@IT
@IT Special -PR-
  TomcatやJBossなどAPサーバ環境に関する
情報を集約! “業務”用APサーバ大百科

New!
  一気に解説! 最新のクラスタストレージ
「RAIDを超えたストレージ基準」……など

New!
  クラウド的ユーザー体験の変化は脅威か?
仮想化技術を使いこなす運用管理術を紹介

New!

  上司や部下、部署内メンバーとの情報共有
を“ガラッ”と変えるコラボツールとは?

New!
  おばかアプリ選手権、第4弾開催中!!
ムダにカッコよくてくだらない作品求ム!

  社内ファイルサーバを“クラウド”に統合
VPN直結「クラウド型ストレージ」を紹介

  Twitterのアカウントはなぜ突破された?
メールによる新手の攻撃手法とその対策

  もう仮想化のお試しフェイズは終わりだ!
Hyper-V 2.0が基幹システムも仮想化

  美人!? まあまあ? 気になる いやし系!!
PV急増で「美人時計」がとった手段とは?

  クライアント企業から求められる人材
⇒IT技術と経営戦略を併せ持つ「戦略家」

  .NET編集長が実践する「技術情報検索術」
サンプル・コードを簡単に探す“技”は?

  業務効率と情報セキュリティ対策を両立!
手間なく確実に機密情報を守る方法とは?

  進化を続ける富士通ストレージETERNUS DX
製品開発者の自信を裏付けるものとは何か

  運用管理の課題を“2つの観点”から分析
ユーザー満足度の高い「仮想環境」とは?

  【CTC事例】約30の基幹システムを統合!
膨大なバッジジョブを制御した方法は?

  仮想化すればコストは削減できるか?
仮想化に必要な「3つの視点」を解説する

  その数、なんと400台以上! グループ内
サーバの「統合管理」によるメリットは?