自定义未经过身份验证时执行的操作

时间:2012-08-30 18:11:29

标签: security symfony

我有一个Symfony 2.1应用程序,根据请求的URL,我想在用户的凭据到期时采取不同的操作。我正在使用fos_userbundle,默认情况下会重定向到登录URL。在我的情况下,我想要返回客户端将处理的特殊响应,而不是重定向。

想法#1:
我不确定我到底需要做些什么才能做到这一点。我已经逐步完成了代码,发现Symfony\Component\Security\Http\Firewall\ExceptionListener正在捕获抛出的异常,最终设置了RedirectResponse。我想我需要在这里挂钩并设置不同的响应,但我还没有找到它。

想法#2:
我想我可能需要设置另一个防火墙,以不同的方式处理丢失的凭据。这似乎会有更多的工作,而且感觉感觉正确。

我的两个想法都可能偏离基础。这似乎不应该是思考难以弄清楚,但我已经搜索了高低,无法找到答案。

1 个答案:

答案 0 :(得分:0)

我不知道他们是否在2.1 vs 2.0中更改了内核侦听器的格式,但也许您可以创建一个处理onKernelRequest方法的侦听器,并检查它们是否经过身份验证。

kernel.listener.pageloadlistener:
    class: Acme\DemoBundle\EventListener\PageLoadListener
    tags:
        - { name: kernel.event_listener, event: kernel.request, method: onKernelRequest  }

class PageLoadListener
{
    public function onKernelRequest(GetResponseEvent $event)
    {
       //Do whatever here, you could pass in the security context in the construct of this class to get the user
    }
}