Estoy tratando de instalar mis cosas de seguridad para Symfony2 y lo tengo funcionando hasta ahora, pero ahora necesito hacer algunas cosas más sofisticadas. Actualmente estoy usando todo lo relacionado con la autenticación previa (uso un componente de terceros para iniciar sesión y administrar sesiones). Esa parte funciona a la perfección junto con el paquete de seguridad JMS.Usando AccessDeniedHandlerInterface de Symfony2
Ahora estoy en el punto en el que quiero ver a los usuarios que lanzan 403, así que puedo reenviarlos a la página de inicio de sesión del componente de terceros que estoy usando. Creo que mi mejor opción es agregar un controlador de excepción al oyente de excepción. Estoy mirando el AccessDeniedHandlerInterface.
- ¿Es esta la dirección correcta para mí?
- ¿Cómo agrego este controlador al detector de excepciones?
EDIT: Terminé haciendo algo similar. Creé un servicio que se solicita en el evento kernel.exception. services.yml se ve así:
services:
kernel.listener.accessDenied:
class: Fully\Qualified\Namespace\Path\To\Class
tags:
- { name: kernel.event_listener, event: kernel.exception, method: onAccessDeniedException }
y el yo que la clase:
<?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.
}
}
}