Sto cercando di ottenere la configurazione della mia sicurezza per symfony2 e ho funzionato fino ad ora, ma ora ho bisogno di fare altre cose fantasiose. Attualmente sto utilizzando tutto ciò che riguarda PreAuthentication (utilizzo 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.
Ora sono al punto in cui voglio catturare gli utenti che stanno lanciando 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. Sto guardando AccessDeniedHandlerInterface .
EDIT: ho finito per fare qualcosa di simile. Ho creato un servizio che viene richiesto sull’evento kernel.exception. services.yml si presenta così:
services: kernel.listener.accessDenied: class: Fully\Qualified\Namespace\Path\To\Class tags: - { name: kernel.event_listener, event: kernel.exception, method: onAccessDeniedException }
e la class stessa:
getException(); //Get the root cause of the exception. while (null !== $exception->getPrevious()) { $exception = $exception->getPrevious(); } if ($exception instanceof AccessDeniedException) { //Forward to third-party. } } }
Suona bene.
Oppure, se sei specificamente interessato a AccessDeniedException, puoi definire anche access_denied_handler
all’interno del tuo firewall in security.yml
:
security: firewalls: my_firewall: # ... access_denied_handler: kernel.listener.access_denied.handler # ...
Quindi definisci il tuo servizio nel tuo services.xml
o equivalente:
Path\To\Your\Class
La class del gestore:
use \Symfony\Component\Security\Http\Authorization\AccessDeniedHandlerInterface; class MyAccessDeniedHandler implements AccessDeniedHandlerInterface { public function handle(Request $request, AccessDeniedException $accessDeniedException) { // do something with your exception and return Response object (plain message of rendered template) } }
È ansible trovare il riferimento completo sulla sicurezza di Symfony2 qui: http://symfony.com/doc/2.8/reference/configuration/security.html