Sto cercando di ottenere la mia messa a punto roba di sicurezza per Symfony2 e devo farlo funzionare finora, ma ora ho bisogno di fare alcune cose più di fantasia. Attualmente sto usando tutto ciò che riguarda l'autenticazione preliminare (io uso un componente di terze parti per l'accesso e la gestione delle sessioni). Questa parte sta funzionando alla perfezione con il bundle di sicurezza JMS.Usando di Symfony2 AccessDeniedHandlerInterface
Ora sono al punto in cui voglio catturare gli utenti che lanciano 403 quindi posso semplicemente inviarli alla pagina di accesso del componente di terze parti che sto usando. Penso che la mia migliore scommessa sia quella di aggiungere un gestore di eccezioni al listener di eccezioni. Io sto guardando il AccessDeniedHandlerInterface.
- E 'questa la direzione giusta per me essere in corso?
- Come faccio ad aggiungere questo gestore per l'ascoltatore eccezione?
MODIFICA: Ho finito per fare qualcosa di simile. Ho creato un servizio che viene spinto sull'evento kernel.exception. services.yml assomiglia a questo:
services:
kernel.listener.accessDenied:
class: Fully\Qualified\Namespace\Path\To\Class
tags:
- { name: kernel.event_listener, event: kernel.exception, method: onAccessDeniedException }
e la classe è di per sé:
<?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.
}
}
}