我怎样才能获得更多关于 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。因此它可以提供有关所有安全组件的信息。
一般来说,在请求处理期间,我如何才能获得有关 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。因此它可以提供有关所有安全组件的信息。