我用 Zend FW 2 做一个安静的 web 服务。我怎样才能创建一个系统,检查 ie。每次调用 REST 时的 API 密钥?在每个功能中检查每个控制器中的密钥当然不是要走的路,所以我在寻找“全局”的东西。
谢谢!
我用 Zend FW 2 做一个安静的 web 服务。我怎样才能创建一个系统,检查 ie。每次调用 REST 时的 API 密钥?在每个功能中检查每个控制器中的密钥当然不是要走的路,所以我在寻找“全局”的东西。
谢谢!
假设您所有的休息方法都在一个控制器中,您可以使用高优先级监听该控制器调度事件,以便尽早完成检查......
在您的模块引导程序中注册监听器,例如假设您向模块添加ApiController
了Application
一个
public function onBootstrap(EventInterface $e)
{
$app = $e->getApplication();
// get the shared events manager
$sem = $app->getEventManager()->getSharedManager();
// listen to dispatch event when triggered by the ApiController
$sem->attach('Application\Controller\ApiController', 'dispatch', function($e) {
// do your api key checks
// if checks fail get the response from the controller
$controller = $e->getTarget();
$response = $controller->getResponse();
$response->setStatusCode(401);
// return $response, short circuiting dispatch event
return $response;
}, 9000); // 9000 = high priority, do this early
}
需要注意的是,传递给闭包的事件包含作为其目标的控制器实例,因此如果您需要从 ServiceManager 获取服务以进行 api 检查,您可以像在控制器本身中那样执行此操作,即。 ..
$controller = $e->getTarget();
$sm = $controller->getServiceLocator();