AccessDeniedException в журнале перед перезаписью - PullRequest
0 голосов
/ 06 июня 2018

В 4.1, когда пользователь хочет получить доступ к странице с защитой (@Security (например, has_role ('ROLE_ADMIN') "), пользователь будет перенаправлен на страницу входа. Это работает. У меня нет ошибки 500.

Но в моем журнале /var/log/prod.log у меня есть ошибка:

[2018-06-06 09:30:47] request.CRITICAL: Uncaught PHP Exception Symfony\Component\Security\Core\Exception\AccessDeniedException: "Access Denied." at /var/www/website/vendor/symfony/security/Http/Firewall/AccessListener.php line 68 {"exception":"[object] (Symfony\\Component\\Security\\Core\\Exception\\AccessDeniedException(code: 403): Access Denied. at /var/www/website/vendor/symfony/security/Http/Firewall/AccessListener.php:68)"} []
[2018-06-06 09:30:47] security.DEBUG: Access denied, the user is not fully authenticated; redirecting to authentication entry point. {"exception":"[object] (Symfony\\Component\\Security\\Core\\Exception\\AccessDeniedException(code: 403): Access Denied. at /var/www/website/vendor/symfony/security/Http/Firewall/AccessListener.php:68)"} []
[2018-06-06 09:30:47] security.DEBUG: Calling Authentication entry point. [] []

Я не понимаю, почему у меня есть критическая ошибка.

1 Ответ

0 голосов
/ 06 июня 2018

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) выполняет служебные обязанности для перенаправления на начальную точку аутентификации ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...