如何为安全监听器设置à优先级?

时间:2015-03-24 15:02:14

标签: symfony symfony-components

我的门户网站上有一个Sso身份验证,如果请求中存在特定的标头,则会绕过登录表单。

当我尝试模仿用户时,Symfony的Context Listener会找到用户并将其加载到安全上下文中,然后我的Sso侦听器会检测标头并覆盖安全令牌中的令牌。所以冒充失败了。

我有两个想法,但我不知道可行性:

  • 有没有办法为这些安全监听器配置优先级?
  • 有没有办法检测来自Firewall \ ListernerInterface的handle方法事件的安全上下文中是否已经设置了经过身份验证的令牌?

1 个答案:

答案 0 :(得分:2)

以下是使用getSubscriedEvents设置优先级的侦听器示例:

class ModelEventListener extends ContainerAware implements EventSubscriberInterface
{
    const ControllerRoleEventListenerPriority  = -1100;
    const ControllerModelEventListenerPriority = -1900;
    const ControllerFormEventListenerPriority  = -1910;

    const ViewEventListenerPriority = -1900;

    public static function getSubscribedEvents()
    {
        return array(
            KernelEvents::CONTROLLER => array(
                array('onControllerRole',  self::ControllerRoleEventListenerPriority),
                array('onControllerModel', self::ControllerModelEventListenerPriority),
                array('onControllerForm',  self::ControllerFormEventListenerPriority),
            ),
            KernelEvents::VIEW => array(
                array('onView', self::ViewEventListenerPriority),
            ),
        );
    }

您还可以在services.yml文件中设置优先级:http://symfony.com/doc/current/cookbook/service_container/event_listener.html

services:
  kernel.listener.your_listener_name:
    class: AppBundle\EventListener\AcmeExceptionListener
    tags:
    - 
      name: kernel.event_listener
      event: kernel.exception
      method: onKernelException
      priority: 666

最后,以下是一些框架服务的优先事项:http://symfony.com/doc/current/reference/dic_tags.html#kernel-event-listener

不确定记录安全侦听器优先级的位置。他们必须在某个地方。您始终可以查看安全捆绑包。