2016-06-30 10 views
0

私のアプリケーションに対する試行のためにデータログを実装したいと思います。セキュリティ権のない人が特定のページに行きたがっているときに、この1つが表示されます。たとえば、通常のユーザーは、管理者のみが使用できるURLにアクセスしようとしています。エラーページ以外のものでSymfonyセキュリティアノテーションに応答する

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

そして、今の私は、エラーページを表示するためにそれを使用する:

symfonyはこのセキュリティアノテーションを提供しています。しかし、私がやりたいことは、誰かが管理専用サイトに再帰的に(1分未満で3回以上)アクセスしようとすると、データをデータベースに送信することです。私が保存するデータの種類は、誰かがログインしている場合はユーザー、IP、タイムスタンプなどです。私は既に誰かが許可なしにページに繰り返しアクセスしようとしていることを知る方法があるかどうか、そしてその場合に私のサービスに電話をかける方法があるかどうかを知りたいだけの記憶をするサービスを持っています。

私はsymfonyのドキュメントをすべて見ていて、私の問題に関連する情報は見つかりませんでした。私はあなたの助けに感謝します!

ありがとうございます。

私の他のサービスを利用できるようにするために、サービスの宣言に加え、これに私に言ったこと @ShiraNai7私がやった

を解決しました。ありがとう。

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

答えて

1

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のドキュメントを参照してください - How to Create Event Listeners and Subscribers

+0

はうまくいくかもしれない何かのように思えます。唯一のことは、 '$ service = $ this-> get( 'myService')'を実行するget()メソッドがない場合に私のサービスを実装する方法です。 – OmarAguinaga

+0

私がリンクしているドキュメントの例があります。リスナーに* kernel.event_listener *をタグ付けしている間に、依存関係を注入することもできます。 DIコンテナ全体は必要ありません。 http://symfony.com/doc/current/book/service_container.html#creating-configuring-services-in-the-container – ShiraNai7

+0

ありがとうございました。 – OmarAguinaga

関連する問題