gpt4 book ai didi

perl - 我可以让单个 Perl 模块充当多种 mod_perl 处理程序吗?

转载 作者:行者123 更新时间:2023-12-02 09:01:58 25 4
gpt4 key购买 nike

我正在为 Apache 中的各种登录相关功能编写一系列相关的 mod_perl 处理程序,因此我的 Apache 配置文件如下所示(例如)

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

每个模块(MyAccessMyAuthenMyAuthz)都定义一个

sub handler() {}

在处理请求的相关点调用哪个mod_perl

我想知道是否有一种方法可以使用一个 Perl 模块而不是三个来完成此操作(用户安装一个模块而不是三个模块会更整洁、工作量更少)?

也许有某种方法可以定义处理程序方法的名称。或者有没有办法从 handler() 代码中检测我应该执行哪种处理?

最佳答案

它出现在 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

这种方法允许您拥有一个处理程序方法,该方法可以根据对象创建时设置的对象属性具有不同的行为。

免责声明:自从我使用 mod_perl 配置的这一部分以来已经有一段时间了,因此您的结果可能会有所不同!

关于perl - 我可以让单个 Perl 模块充当多种 mod_perl 处理程序吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/540275/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com