Symfony Framework определяет Symfony\Component\HttpKernel\EventListener\ExceptionListener
, который подписывается на KernelEvents::EXCEPTION
с очень высоким приоритетом 2048 для метода logKernelException
(см. https://github.com/symfony/http-kernel/blob/master/EventListener/ExceptionListener.php#L93):
public static function getSubscribedEvents()
{
return array(
KernelEvents::EXCEPTION => array(
array('logKernelException', 2048),
array('onKernelException', -128),
),
);
}
Таким образом, брошенный AccessDeniedException
сначала обрабатывается этим logKernelException
методом, который регистрирует его с уровнем КРИТИЧЕСКИЙ (см. https://github.com/symfony/http-kernel/blob/master/EventListener/ExceptionListener.php#L109):
protected function logException(\Exception $exception, $message)
{
if (null !== $this->logger) {
if (!$exception instanceof HttpExceptionInterface || $exception->getStatusCode() >= 500) {
$this->logger->critical($message, array('exception' => $exception));
} else {
$this->logger->error($message, array('exception' => $exception));
}
}
}
На этом этапе AccessDeniedException
было зарегистрировано на канале request . Это полностью относится к объему запроса: исходный запрос не выполнен, так как аутентификация не была выполнена ...
Затем, Symfony\Component\Security\Http\Firewall\ExceptionListener
, прослушиваниеKernelEvents::EXCEPTION
, но обрабатывает только те, которые связаны с аутентификацией (см. https://github.com/symfony/security/blob/master/Http/Firewall/ExceptionListener.php#L87) выполняет служебные обязанности для перенаправления на начальную точку аутентификации ...