2

所以我可以执行一个简单的请求监听器:

public function onKernelRequest(GetResponseEvent $event)
{
    $request = $event->getRequest();

        //etc.

在 services.yml 中:

  listener.my_request_listener:
    arguments: 
      - "@translator"
    class: MyBundle\EventListener\RequestListener
    tags: 
      - 
        event: kernel.request
        method: onKernelRequest
        name: kernel.event_listener
      - 
        event: kernel.response
        method: onKernelResponse
        name: kernel.event_listener

我现在要做的是检测身份验证是否失败(使用 Symfony2 的内置安全组件)。我有所有的安全设置,但我需要检测安全何时失败。像这样的东西:

public function onKernelAuthFail(GetAuthenticationFailEvent $event) {

    //authentication failed, so action can be performed here before it redirects

}

我已经看到了:http ://api.symfony.com/2.3/Symfony/Component/Security/Http/Firewall/ListenerInterface.html并谈到了“防火墙”监听器,但我就是不明白该怎么做. 我敢打赌这只是一行代码之类的。

4

1 回答 1

1

看看DefaultAuthenticationFailureHandler课堂。它应该在Symfony\Component\Security\Http\Authentication. 这是 Symfony 在身份验证失败时使用的默认侦听器。

但是您可以编写自己的并通过security.yml像这样将其添加到您的中来使用它:

firewalls:
    firewall_name:
        form_login:
            failure_handler: your.service.id

这是对 security.yml 配置的完整参考:http: //symfony.com/doc/current/reference/configuration/security.html

于 2013-07-07T13:20:22.960 回答