Я пытаюсь настроить систему безопасности для symfony2, и она у меня работает до сих пор, но теперь мне нужно сделать более причудливые вещи.В настоящее время я использую все, что касается PreAuthentication (я использую сторонний компонент для входа в систему и управления сеансом).Эта часть прекрасно работает в тандеме с пакетом безопасности JMS.
Теперь я перехожу к тому моменту, когда хочу поймать пользователей, которые выбрасывают 403, поэтому я могу просто переслать их на страницу входа третьей стороны.компонент, который я использую.Я думаю, что лучше всего добавить обработчик исключений для слушателя исключений.Я смотрю на AccessDeniedHandlerInterface .
- Это правильное направление для меня?
- Как добавить этот обработчик в прослушиватель исключений?
РЕДАКТИРОВАТЬ: я закончил делать что-то подобное.Я создал сервис, который запрашивается в событии 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.
}
}
}