Próbuję ustawić moje ustawienia bezpieczeństwa dla symfony2 i mam to działa do tej pory, ale teraz muszę zrobić kilka bardziej wymyślnych rzeczy. Obecnie używam wszystkiego, co ma do czynienia z PreAuthentication (do logowania i zarządzania sesjami używam komponentu innego producenta). Ta część działa świetnie w połączeniu z pakietem bezpieczeństwa JMS.Używanie Symfony2 AccessDeniedHandlerInterface
Teraz jestem w momencie, gdy chcę złapać użytkowników, którzy rzucają 403, więc mogę po prostu przekazać je do strony logowania komponentu strony trzeciej, którego używam. Myślę, że najlepiej jest dodać obsługę wyjątków do detektora wyjątków. Patrzę na AccessDeniedHandlerInterface.
- Czy to właściwy kierunek dla mnie?
- Jak dodać ten moduł obsługi do detektora wyjątku?
EDYTOWANIE: Skończyło się na zrobieniu czegoś podobnego. Stworzyłem usługę, która jest monitowana w zdarzeniu kernel.exception. services.yml wygląda następująco:
services:
kernel.listener.accessDenied:
class: Fully\Qualified\Namespace\Path\To\Class
tags:
- { name: kernel.event_listener, event: kernel.exception, method: onAccessDeniedException }
i self klasa to:
<?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.
}
}
}