Могу ли я заставить один модуль Perl выступать в качестве нескольких типов обработчиков mod_perl? - PullRequest
2 голосов
/ 12 февраля 2009

Я пишу серию связанных обработчиков mod_perl для различных функций входа в систему в Apache, поэтому мой конфигурационный файл Apache выглядит следующим образом (например)

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

Каждый из модулей (MyAccess, MyAuthen, MyAuthz) определяет

sub handler() {}

Который mod_perl вызывает в соответствующем пункте обработки запроса.

Что я хотел бы знать, есть ли способ сделать это с одним модулем Perl, а не с тремя (просто аккуратнее и меньше работы для пользователей, чтобы установить один модуль вместо 3)?

Есть ли какой-нибудь способ определить имя метода-обработчика, возможно. Или есть способ обнаружить из кода handler(), какую обработку я должен делать?

Ответы [ 2 ]

5 голосов
/ 12 февраля 2009

Из документов mod_perl 2.0 видно, что вы можете использовать синтаксис "method", чтобы делать то, что вы хотите (я не проверял это):

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, поэтому ваши результаты могут отличаться!

1 голос
/ 12 февраля 2009

Похоже, что одной из возможностей может быть использование вызова push_handlers() и настройка обработчиков в коде, а не в файле apache conf

Смотрите здесь: http://tinyurl.com/bwdeew

...