Web アプリケーションの特性と AOP
description
Transcript of Web アプリケーションの特性と AOP
Web アプリケーションの特性と AOP九州工業大学大学院
外村慶二
1
鵜林 尚靖,成瀬 龍人,塩塚 大 ( 九工大 )中島 震, Reda Ahroum, Daniel Balouek (NII)
概要
•Web アプリの横断的関心事✓サニタイジング,アクセス制御,アクセ
ス解析等
•Web アプリ開発に特化した AOP 機構の開発
✓AOWP✓ページアクセスとユーザセッションのサ
ポート
2
目次
•Web アプリケーションと AOP
•Web アプリ開発に特化した AOP 機構の開発- AOWP
•AOWP の適用事例- オープンソースを対象とした記述実験- AOP ベースの Web アプリケーション開発
•議論とまとめ
3
Web アプリケーションとAOP
4
Web アプリケーション
5
Web アプリの横断的関心事関心事 影響を与える処理,関係するコンテキスト情報
サニタイジング[Masuhara2003]
データベースアクセス, HTML 出力,データフロー
アクセス制御[Lemos2006]
ページアクセス,ユーザごとの認証状態
バージョニング[Lemos2006]
ファイルアクセス,データベースアクセス
ファイル圧縮 ( 変換 ) ファイルアクセス
アクセス解析 ページアクセス,ユーザ /アプリケーションごと
サービス監視 ページアクセス,ユーザごとのページ遷移履歴 [Tan2002]
構造[Kojarski2003]
Web ページの構造,データベースの構造
6
Web アプリと AOP 言語dflow [Masuhara2003]データフローのサポート
( サニタイジング等 )
dflow [Masuhara2003]データフローのサポート
( サニタイジング等 )
AspectJ , AOPHP 等( サニタイジング,ファイルアクセス,
キャッシング等 )
AspectJ , AOPHP 等( サニタイジング,ファイルアクセス,
キャッシング等 )
7
本日の話関心事 影響を与える処理,関係するコンテキスト情報
サニタイジング[Masuhara2003]
データベースアクセス, HTML 出力,データフロー
アクセス制御[Lemos2006]
ページアクセス,ユーザごとの認証状態
バージョニング[Lemos2006]
ファイルアクセス,データベースアクセス
ファイル圧縮 ( 変換 ) ファイルアクセス
アクセス解析 ページアクセス,ユーザ /アプリケーションごと
サービス監視 ページアクセス,ユーザごとのページ遷移履歴 [Tan2002]
構造[Kojarski2003]
Web ページの構造,データベースの構造
8
本日の話dflow [Masuhara2003]dflow [Masuhara2003]
AspectJ , AOPHP 等AspectJ , AOPHP 等
AOWPページアクセス,
ユーザセッションのサポート( アクセス制御,アクセス解析,
サービス監視等 )
AOWPページアクセス,
ユーザセッションのサポート( アクセス制御,アクセス解析,
サービス監視等 )
9
Web アプリ開発に特化したAOP 機構の開発
10
研究動機
ページアクセスの取扱いの難しさ
ページアクセスをプログラム実行に対応付ける必要がある
例 : Web アプリ全体にアクセス制御を追加する
11
研究動機
ユーザセッションの取扱いの難しさ
例 : Web アプリ全体にアクセス制御を追加する
12
ユーザセッションを取り扱う為のコード記述が必要
AOWP
リクエスト ジョインポイントとそれらを扱う為のポイントカット記述子
Web アプリの特性に合わせたインスタンス生成機構
13
AOWP
ページアクセスの取扱い
サーバサイドのプログラム
サーバサイドのプログラム
beforeアドバイス
beforeアドバイス
afterアドバイス
afterアドバイス
サーバサイドのプログラム
aroundアドバイス
aroundアドバイス
Web サーバWeb クライアント
リクエストジョインポイント
request (URL_PAT, FD_PATS, COOKIE_PATS, HEADER_PATS)URL_PAT: 選択する HTTP リクエストに含まれる URL のパターン
FD_PATS: フォームデータの内容を指定するパターンCOOKIE_PATS: クッキーの内容を指定するパターン
HEADER_PATS: HTTP リクエストヘッダの内容 (IP アドレス等 ) を指定するパターン
request ポイントカット
14
AOWP
アスペクトのインスタンス生成機構
実行時のコンテキストに基づいて参照できるインスタンスを制限
15
リクエスト処理ごと,ユーザごと,アプリケーションで 1 つ,の 3 種類のインスタンス生成方法
AOWP の実装
PHP を対象としたプロトタイプ実装
•PHP に基づく AOP 機構 + Web に特化した AOP 機構
•コード変換により織り込みを行う- リクエスト ジョインポイントとポイントカットは
PHP のプログラム実行と対応付けて織り込み- Web 固有のアスペクトのインスタンス生成機構を実現
するファクトリクラスを作成
•AOP フレームワークとして実装- アスペクトを PHP のクラスとして記述
16
around
AOWP の実装
リクエスト JP & PC の実装
アドバイスの種類 対応する PHP プログラムの実行点
before •HTTP リクエストと対応する PHP スクリプトの呼び出し時
after•HTTP リクエストと対応する PHP スクリプトの処理終了時•exit 関数の呼び出し前
around •HTTP リクエストと対応する PHP スクリプトの処理全体
<?php include ‘func.php’; $success = addUser( $_POST[‘name’], $_POST[‘password’] ); if (!$success) { exit(); } displayPage();?>
http://xxx.com/addUser.php
addUser.php
<?php/**omission**/?>
func.phpbefore
before
after
after
17
AOWP の実装
アスペクトのインスタンス生成機構の実装
インスタンスを管理するファクトリクラスを作成
クッキーインスタンスの永続化 PHP の静的変数 インスタンスの永続化
18
AOWP の実装
アスペクトの記述方法class AuthAspect extends PerSessionAspect { private $_authed = false;
public function __construct() { $accChkPC = new RequestPointcut('.*');
$accChkAdv = new BeforeAdvice(); $accChkAdv->setPointcut($accChkPC); $accChkAdv->setAdviceBody('accChk'); $this->addAdvice($accChkAdv); }
public function accChk(JoinPoint $jp) { if (!$this->_authed) { jumpToLoginPage(); } }
...}
00:01:02:03:04:05:06:07:08:09:10:11:12:13:14:15:16:17:...61:
アスペクトのインスタンスの取扱い方法を指定
ポイントカットの定義
アドバイスの定義
19
AOWP の適用事例 (1)
オープンソースを対象とした記述実験
20
AOWP の適用事例 (1)
PukiWiki を対象とした記述実験
コード行数 : 17925 行ファイル数 : 107 個
コード行数 : 17925 行ファイル数 : 107 個
•AOWP を使って,どんな横断的関心事を実システムについかできるか ?
- ユーザ認証アスペクト ( 認証結果の保存 )
- アンケートアスペクト ( 時間の取扱い )
- モニタアスペクト (Web アプリの利用状況の取扱い )
21
AOWP の適用事例 (1)
ユーザごとの状態に基づくアスペクト
22
AOWP の適用事例 (1)
ユーザの滞在時間に基づくアスペクト
23
AOWP の適用事例 (1)
Web サーバの利用状態に基づくアスペクト
24
AOWP の適用事例 (2)
AOP ベースの Web アプリケーション開発
25
AOWP の適用事例 (2)
写真管理システムの開発
•Web アプリを一から開発する際に AOWP をどのように利用できるか ?
•Reda さんと Daniel さんが約 1 ヶ月間開発
•写真の閲覧 / 登録 / 変更ができるシステム
26
AOWP の適用事例 (2)
ベース機能とアスペクト
27
画面のデザインとデータの保存機能のみをベース機能として開発
アクセス制御等の非機能要求をアスペクトとして追加開発
AOWP の適用事例 (2)
Web 固有の関心事 と それ以外の関心事
28
•ページアクセスに横断的な関心事はWeb に特化した AOP 機構を使用
- ユーザ認証アスペクト
- アクセス解析アスペクト
- アクセス履歴アスペクト
- 警告アスペクト
•データベースアクセスやファイルアクセス等に関係する関心事は,プログラミング言語に基づく AOP 機構を使用
- ファイル圧縮アスペクト
- 入力値検証アスペクト
- メール検証アスペクト
議論とまとめ
29
関心事 影響を与える処理,関係するコンテキスト情報
サニタイジング[Masuhara2003]
データベースアクセス, HTML 出力,データフロー
アクセス制御[Lemos2006]
ページアクセス,ユーザごとの認証状態
バージョニング[Lemos2006]
ファイルアクセス,データベースアクセス
ファイル圧縮 ( 変換 ) ファイルアクセス
アクセス解析 ページアクセス,ユーザ /アプリケーションごと
サービス監視 ページアクセス,ユーザごとのページ遷移履歴 [Tan2002]
構造[Kojarski2003]
Web ページの構造,データベースの構造
議論 (1)
実行時の動的織り込み
実行時の機能の付け替えができる事が望ましい
実行時の動的織り込みが有効
実行時の機能の付け替えができる事が望ましい
実行時の動的織り込みが有効
30
議論 (1)
実装方法の検討
事前にサーバサイドプログラムにアドバイスの実行コードを埋め込む方法 (AspectJ 等 )
Web サーバ
Web クライアントプログラム
プログラムWeb クライアント
Weaver
実行性能の最適化が行いやすい
プリコンパイル型
31
HTTP リクエストを横取りして織り込みを行う方法
(AOJS [久保 2008], aspectPHP)
Web サーバ
Web クライアントプログラム
プログラムWeb クライアント
Weaver
動的織り込みに適している
プロキシ型
関心事 影響を与える処理,関係するコンテキスト情報
サニタイジング[Masuhara2003]
データベースアクセス, HTML 出力,データフロー
アクセス制御[Lemos2006]
ページアクセス,ユーザごとの認証状態
バージョニング[Lemos2006]
ファイルアクセス,データベースアクセス
ファイル圧縮 ( 変換 ) ファイルアクセス
アクセス解析 ページアクセス,ユーザ /アプリケーションごと
サービス監視 ページアクセス,ユーザごとのページ遷移履歴 [Tan2002]
構造[Kojarski2003]
Web ページの構造,データベースの構造
議論 (2)
ページ遷移履歴の取扱い
ページ遷移履歴を直接取り扱う為のサポート
ページ遷移履歴を直接取り扱う為のサポート
32
議論 (2)
ページ遷移履歴に基づく PC 機構
•Web アプリの監視において,アクセス履歴を取り扱う事は重要
•実行履歴を取り扱う AOP [Walker2004, Douence2004, Allan2005]
- ユーザごとのアクセス履歴を,プログラムの実行履歴に対応付けるのは大変
•リクエストジョインポイントと per-session のアスペクトインスタンスを利用する事で実用的なものが作れないだろうか ?
33
まとめ
•Web アプリケーションにも様々な横断的関心事がある
•横断的関心事の特徴に合わせた AOP 機構の開発は有効- AOWP: ページアクセスとユーザセッションのサポート
34