Web アプリケーションの特性と AOP

Post on 31-Jan-2016

61 views 0 download

description

Web アプリケーションの特性と AOP. 九州工業大学大学院 外村慶二. 鵜林 尚靖,成瀬 龍人,塩塚 大 ( 九工大 ) 中島 震, Reda Ahroum, Daniel Balouek (NII). 1. 概要. Web アプリの横断的関心事 サニタイジング,アクセス制御,アクセス解析等 Web アプリ開発に特化した AOP 機構の開発 AOWP ページアクセスとユーザセッションのサポート. 2. 目次. Web アプリケーションと AOP Web アプリ開発に特化した AOP 機構の開発 AOWP AOWP の適用事例 - PowerPoint PPT Presentation

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