Security Symfony2访问被拒绝异常-详细信息?

Security Symfony2访问被拒绝异常-详细信息?,security,symfony,acl,roles,blacklist,Security,Symfony,Acl,Roles,Blacklist,我有以下问题: 在我的symfony2应用程序中,我有一个名为“ClientIpVoter”的投票者,用于检查客户端ip是否被列入黑名单()。如果ip被列入黑名单,安全组件将抛出AccessDeniedException 安全组件的其他部分也抛出AccessDeniedException,例如,如果用户没有正确的角色 现在我的问题是,我想知道为什么抛出AccessDeniedException,以便执行不同的操作。例如,显示消息,或者(如果由于角色不足而引发AccessDeniedExcepti

我有以下问题: 在我的symfony2应用程序中,我有一个名为“ClientIpVoter”的投票者,用于检查客户端ip是否被列入黑名单()。如果ip被列入黑名单,安全组件将抛出AccessDeniedException

安全组件的其他部分也抛出AccessDeniedException,例如,如果用户没有正确的角色

现在我的问题是,我想知道为什么抛出AccessDeniedException,以便执行不同的操作。例如,显示消息,或者(如果由于角色不足而引发AccessDeniedException),将用户重定向到一个页面,在该页面上,用户可以确认自己的帐户或电子邮件


但是AccessDeniedException不包含任何关于授权问题根源的信息。您将如何实现此功能?

您可以捕获针对黑名单IP引发的AccessDeniedException,将其包装在您自己的自定义异常中,该异常会添加额外信息,例如AccessDeniedBecauseFinSufficientRolesException,然后再次引发该异常。 伪代码:

try
{
  BlacklistedVoterStuff();
}
catch( AccessDeniedException e )
{
  throw AccessDeniedBecauseOfInsufficientRolesException( e.message );
}

不幸的是,BlacklistedVoterStuff是在自己的上下文中执行的,在这里我只为投票人提供实现,然后由symfony将其连接到授权过程中。如果我的投票者返回no access,则安全组件将抛出AccessDeniedException,但没有关于发生了什么的详细信息。也许您可以让投票者抛出异常而不是返回no access,这样可能会再次冒泡到您的上下文中?