我正在为Apache中的各种与登录相关的函数编写一系列相关的mod_perl处理程序,所以我的Apache配置文件看起来像这样(例如)
PerlAccessHandler MyApache::MyAccess PerlAuthenHandler MyApache::MyAuthen PerlAuthzHandler MyApache::MyAuthz
每个模块(的MyAccess
,MyAuthen
,MyAuthz
)限定
sub handler() {}
mod_perl
在处理请求的相关点处调用哪个.
我想知道的是,是否有一种方法可以使用一个Perl模块而不是三个(这对于用户来说安装一个模块而不是3个更简单,更少工作)?
有没有办法定义处理程序方法的名称.或者有没有办法从handler()
代码中检测出我应该做的那种处理?
从mod_perl 2.0文档中可以看出,您可以使用"方法"语法来执行您想要的操作(我没有对此进行测试):
PerlAccessHandler MyApache::MyLoginModule->access_handler PerlAuthenHandler MyApache::MyLoginModule->authen_handler PerlAuthzHandler MyApache::MyLoginModule->authz_handler
我相信这会导致mod_perl在您的MyApache::MyLoginModule
类上以静态方式调用每个命名方法.
如果要执行以下操作,还可以在调用handler
方法时创建要使用的对象:
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'); PerlAccessHandler $MyApache::MyLoginModule::access->handler PerlAuthenHandler $MyApache::MyLoginModule::authen->handler PerlAuthzHandler $MyApache::MyLoginModule::authz->handler
这种方法允许您handler
根据在创建对象时设置的对象的属性,拥有一个可能具有不同行为的方法.
免责声明:自从我使用mod_perl配置的这一部分已经有一段时间了,所以你的结果可能会有所不同!