响应Symfony安全注释时,使用的内容不只是错误页面


Respond to a Symfony security annotation with something more than an error page

我想为针对我的应用程序的尝试实现一个数据日志。其中之一是当没有担保权的人想要访问某个页面时。例如,一个普通用户试图访问一个只有管理员才能访问的url。

Symfony提供了以下安全注释:

/**
* @Security("has_role('ROLE_ADMIN')")
*/

现在我用它来显示一个错误页面。但是我想做的是将数据发送到数据库,以防有人试图频繁地进入仅管理站点(不到一分钟内三次或更多次)。我将存储的数据类型是用户,以防有人登录,IP,时间戳,等等。我已经有了一个存储服务,我只是想知道是否有一种方法可以知道有人试图在未经授权的情况下多次访问该页面,以及在这种情况下如何调用我的服务。

我一直在寻找symfony文档,找不到任何与我的问题相关的信息。谢谢你的帮助!

提前感谢。

我按照@ShiraNai7告诉我的做了,在服务声明中加上这个,以便能够使用我的其他服务。谢谢。

app.exception_listener:
            class: InnoGames'Bundle'OfficeITBundle'EventListener'ExceptionListener
            arguments: [@service_container]
            tags:
                - { name: kernel.event_listener, event: kernel.exception }

您可以为内核创建一个侦听器。异常事件,并在那里进行日志记录。

use Symfony'Component'HttpKernel'Event'GetResponseForExceptionEvent;
use Symfony'Component'HttpFoundation'Response;
public function onKernelException(GetResponseForExceptionEvent $event)
{
    $exception = $event->getException();
    $request = $event->getRequest();
    // do your logging here
}

参见Symfony文档-如何创建事件侦听器和订阅器