我怎样才能获得更多关于 Symfony2 安全系统的调试信息?

How can I get more debugging info about the Symfony2 security system?

一般来说,在请求处理期间,我如何才能获得有关 Symfony2 安全系统的各个组件所做出的决定的有用调试输出?我很想看看应用了哪些防火墙和 access_control 语句以及原因。有哪些工具可以更轻松地解开这个长期存在的 "Why did I get redirected to the login form again" 谜团?

如果需要详细的调试信息,可以使用Blackfire

如果还不够,可以使用WebProfilerBundle它有很好的调试信息。

如果这也不适合您,那么您可以创建自己的数据收集器服务。 数据收集器就像探查器扩展一样,它们可以帮助您收集不同的数据,如路由、调试信息或邮件程序数据。您可以根据需要自定义它们。

请查看文档Here

请检查SecurityDebugBundle这将回答您的所有问题。 小心使用它,因为它需要不同的权限。

通过阅读其代码,您将了解数据收集器如何帮助您进行调试。

希望对你有所帮助。

这是来自 SecurityDebugBundle 的 DataCollecotr:

class FirewallCollector
{
    const HAS_RESPONSE = SecurityDebugDataCollector::DENIED;
    private $securityContext;
    private $container;
    public function __construct(
        SecurityContextInterface $securityContext,
        Container $container
    ) {
        $this->securityContext = $securityContext;
        //Container dependency is a bad thing. This is to be refactored to a compiler pass
        //where all the firewall providers will be fetched
        $this->container = $container;
    }
    public function collect(Request $request, \Exception $exception)
    {
        $token = $this->securityContext->getToken();
        if (!method_exists($token, 'getProviderKey')) {
            return;
        }
        $providerKey = $token->getProviderKey();
        $map = $this->container->get('security.firewall.map.context.' . $providerKey);
        $firewallContext = $map->getContext();
        $event = new GetResponseEvent(
            new SimpleHttpKernel(),
            $request,
            HttpKernelInterface::MASTER_REQUEST
        );
        $firewalls = array();
        foreach ($firewallContext[0] as $i => $listener) {
            $firewalls[$i]= array('class' => get_class($listener), 'result' => SecurityDebugDataCollector::GRANTED);
            try {
                $listener->handle($event);
            } catch (AccessDeniedException $ade) {
                $firewalls[$i]['result'] = SecurityDebugDataCollector::DENIED;
                break;
            }
            if ($event->hasResponse()) {
                $firewalls[$i]['result'] = self::HAS_RESPONSE;
                break;
            }
        }
        return $firewalls;
    }
}

这提供了很多关于防火墙的信息。 此捆绑包还包含 SecurityDebugDataCollector and VotersCollector。因此它可以提供有关所有安全组件的信息。