我的门户网站上有一个Sso身份验证,如果请求中存在特定的标头,则会绕过登录表单。
当我尝试模仿用户时,Symfony的Context Listener会找到用户并将其加载到安全上下文中,然后我的Sso侦听器会检测标头并覆盖安全令牌中的令牌。所以冒充失败了。
我有两个想法,但我不知道可行性:
答案 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
不确定记录安全侦听器优先级的位置。他们必须在某个地方。您始终可以查看安全捆绑包。