Я пытаюсь настроить свою настройку безопасности для symfony2, и у меня она работает до сих пор, но теперь мне нужно сделать еще несколько причудливых вещей. В настоящее время я использую все, что связано с PreAuthentication (я использую сторонний компонент для входа в систему и управления сеансом). Эта часть отлично работает в сочетании с комплектом безопасности JMS.Использование Symfony2's AccessDeniedHandlerInterface
Теперь я к тому моменту, когда хочу поймать пользователей, которые бросают 403s, поэтому я могу просто переслать их на страницу входа в систему стороннего компонента, который я использую. Я считаю, что лучше всего добавить обработчик исключений для прослушивателя исключений. Я смотрю на AccessDeniedHandlerInterface.
- Это правильное направление для меня?
- Как добавить этот обработчик в прослушиватель исключений?
EDIT: В итоге я сделал что-то подобное. Я создал службу, которая запрашивается в событии kernel.exception. services.yml выглядит следующим образом:
services:
kernel.listener.accessDenied:
class: Fully\Qualified\Namespace\Path\To\Class
tags:
- { name: kernel.event_listener, event: kernel.exception, method: onAccessDeniedException }
и класс это сам:
<?php
namespace Fully\Qualified\Namespace\Path\To;
use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent,
Symfony\Component\HttpFoundation\Response,
Symfony\Component\Security\Core\Exception\AccessDeniedException;
class Class
{
public function onAccessDeniedException(GetResponseForExceptionEvent $event)
{
$exception = $event->getException();
//Get the root cause of the exception.
while (null !== $exception->getPrevious()) {
$exception = $exception->getPrevious();
}
if ($exception instanceof AccessDeniedException) {
//Forward to third-party.
}
}
}