【问题标题】:How to set à priority for security Listeners?如何设置安全监听器的优先级?
【发布时间】:2015-03-24 15:02:14
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: symfony symfony-components


    【解决方案1】:

    这是一个使用 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

    不确定安全侦听器优先级的记录位置。他们一定在某个地方。您可以随时查看安全包。

    【讨论】:

    • 虽然这些优先级会起作用,但它们应该像文档所说的那样在 -255 和 255 之间。
    • 猜想我在创建这些侦听器时忽略了这一点。哦,好吧。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-25
    • 1970-01-01
    • 1970-01-01
    • 2011-05-09
    • 1970-01-01
    • 2021-01-07
    • 2010-10-10
    相关资源
    最近更新 更多