特定のWebリクエストに費やされた時間を操作名とともに記録するフィルタを作成したいとします。しかし、一部のURLにはパスパラメータがあり、URL自体ではなく特定のメソッドに対応するURLパターンを取得できるようなものを探しています。例えばHTTPフィルタからURLハンドラパターンにアクセスする
、私はGET /users/{}/accounts/{}
代わりのように操作名を表示したい/users/{id}/accounts/{type}
のようなURLの要求をGET処理するメソッドのために、言う:GET /users/1/accounts/facebook
またはGET /users/2/accounts/twitter?someParam=3
。
今私は、ログレコードを解析するツールでURLをあらかじめ定義されたパターンと照合して解決しますが、ハックのように見えます。
着信要求を処理するメソッドに関連付けられたURLパターンに簡単にアクセスする方法が見つかりませんでしたので、私は現在考えている解決策の1つは、コントローラメソッド自体にスレッドローカル変数を設定してアクセスすることです私のHTTPフィルタでは、これも解決するためのきれいな方法のようには見えません。
この問題の解決策はありますか?
は、いくつかのコンテキストを設定するには:私はSpring MVCの4
フィルタがGenericFilterBeanを拡張している場合は、それをSpring Managedにすることができます。設定されたRequestMappingHandlerMappingのインスタンスを挿入することができます。これは、指定されたリクエストのマッピングを見つけるために必要と思われるものです。私はここから進める方法を考え出すことができませんでしたが、あなたに与えるかもしれないhttp://stackoverflow.com/questions/14025872/reflectively-getting-list-of-spring-mvc-controllers-matching-specific-urlを参照してくださいどのように一致するURLパターンを取得するかについてのいくつかのアイデア。 –
OK、それを動作させる方法を見ているようです。私は、もし私が何か他のものに固執しない限り、私はこのコードでこのアプローチをとどめることに決めたら、私の質問を更新します。 – Alex
@AlanHay私は答えを掲示した、それは私が望むよりもはるかに簡単であることが判明した。 – Alex