2

私は Apache のさまざまなログイン関連機能に関連する一連の mod_perl ハンドラーを作成しているので、私の Apache 構成ファイルは次のようになります (たとえば)。

PerlAccessHandler MyApache::MyAccess    
PerlAuthenHandler MyApache::MyAuthen
PerlAuthzHandler MyApache::MyAuthz

各モジュール ( MyAccessMyAuthenMyAuthz) は、

sub handler() {}

リクエストmod_perlの処理の関連するポイントで呼び出すもの。

私が知りたいのは、3 つではなく 1 つの Perl モジュールでこれを行う方法があるかどうかです (ユーザーが 3 つのモジュールではなく 1 つのモジュールをインストールする方が、より整頓されて作業が少なくなります)。

おそらく、ハンドラーメソッドの名前を定義する方法はありますか。handler()または、コード内からどのような処理を行うべきかを検出する方法はありますか?

4

2 に答える 2

5

mod_perl 2.0 docsから、「メソッド」構文を使用して必要なことを実行できることがわかります(私はこれをテストしていません):

PerlAccessHandler MyApache::MyLoginModule->access_handler
PerlAuthenHandler  MyApache::MyLoginModule->authen_handler
PerlAuthzHandler MyApache::MyLoginModule->authz_handler

これにより、mod_perl が指定された各メソッドをMyApache::MyLoginModuleクラスで静的に呼び出すようになると思います。

handler次の場合は、メソッドを呼び出すときに使用するオブジェクトを作成することもできます。

<Perl>
  use MyApache::MyLoginModule;
  $MyApache::MyLoginModule::access = MyApache::MyLoginModule->new(phase => 'access');
  $MyApache::MyLoginModule::authen = MyApache::MyLoginModule->new(phase => 'authen');
  $MyApache::MyLoginModule::authz = MyApache::MyLoginModule->new(phase => 'authz');
</Perl>

PerlAccessHandler $MyApache::MyLoginModule::access->handler
PerlAuthenHandler $MyApache::MyLoginModule::authen->handler
PerlAuthzHandler $MyApache::MyLoginModule::authz->handler

handlerこのアプローチにより、オブジェクトの作成時に設定されたオブジェクトのプロパティに基づいて異なる動作を持つ単一のメソッドを持つことができます。

免責事項: mod_perl 構成のこの部分に取り組んでからしばらく経っているため、結果は異なる場合があります。

于 2009-02-12T13:40:26.167 に答える
1

push_handlers()呼び出しを使用して、apache conf ファイルではなくコードでハンドラーを設定する可能性があるようです

こちらをご覧ください:http: //tinyurl.com/bwdeew

于 2009-02-12T06:49:06.810 に答える