我有以下问题: 在我的symfony 2应用程序中,我有一个名为“ClientIpVoter”的选民,它检查客户端ip是否被列入黑名单(http://symfony.com/doc/2.0/cookbook/security/voters.html)。如果ip被列入黑名单,则安全组件会抛出AccessDeniedException。
安全组件的其他部分也会抛出AccessDeniedException,例如,如果用户没有正确的角色。
现在我的问题是,我想知道为什么抛出AccessDeniedException,以便做不同的事情。例如,显示消息,或者(如果由于角色不足而抛出了AccessDeniedException),将用户重定向到他可以例如确认其帐户或电子邮件的页面。
但AccessDeniedException不包含有关授权问题来源的任何信息。你会如何实现这个?
答案 0 :(得分:0)
您可以捕获针对列入黑名单的IP抛出的AccessDeniedException,将其包装在您自己的自定义异常中,该异常会添加额外信息,例如AccessDeniedBecauseOfInsufficientRolesException,然后再次抛出该异常。 伪代码:
try
{
BlacklistedVoterStuff();
}
catch( AccessDeniedException e )
{
throw AccessDeniedBecauseOfInsufficientRolesException( e.message );
}