Symfony2 için güvenlik ayarları kurulumumu almaya çalışıyorum ve şu ana kadar çalışıyorum, ama şimdi daha güzel şeyler yapmam gerekiyor. Şu anda PreAuthentication ile ilgili her şeyi kullanıyorum (oturum açma ve oturum yönetimi için üçüncü taraf bir bileşen kullanıyorum). Bu bölüm, JMS güvenlik paketi ile birlikte çok çalışıyor.Symfony2'nin AccessDeniedHandlerInterface Kullanarak
Şimdi, 403'ü atayan kullanıcıları yakalamak istediğim noktaya geliyorum, böylece bunları kullanıyorum üçüncü taraf bileşeninin giriş sayfasına yönlendirebiliyorum. Bence en iyi bahis, istisna dinleyicisine bir istisna işleyici eklemek. AccessDeniedHandlerInterface'a bakıyorum.
- Bu benim gitmem için doğru yön mü?
- Bu işleyiciyi özel durum dinleyicisine nasıl ekleyebilirim?
DÜZENLEME: Benzer bir şey yaptım. Kernel.exception olayı üzerinde istenen bir hizmet oluşturdum.
services:
kernel.listener.accessDenied:
class: Fully\Qualified\Namespace\Path\To\Class
tags:
- { name: kernel.event_listener, event: kernel.exception, method: onAccessDeniedException }
ve sınıf kendini: services.yml şöyle Bu doğru söylüyorsun
<?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.
}
}
}