0

当社のSpring Boot 1.3.3アプリケーションはSpring Securityを使用しています。リクエストされたURL、HTTP動詞、処理時間、ユーザプリンシパルなどのHTTPリクエストを記録する必要があります。Spring Securityを使用する高優先度フィルタのサーブレットプリンシパル

これは、カスタムサーブレットフィルタを使用して行われます。

カスタムフィルターは、スプリングセキュリティフィルターチェーンよりも高い()優先順位(つまり、より小さいオーダー)でなければなりません。そうしないと、Spring Securityによって拒否された要求に対しては実行されません。

しかし、カスタムフィルタでは、HttpServletRequest:getUserPrincipalは常にnullです。セキュリティーチェーンが完了すると、Spring Securityはセキュリティ情報を削除するようです。

Spring Securityを使用する際にカスタムフィルタから常にユーザプリンシパルを取得する標準的な方法(スレッドローカルマジックなしの意味)はありますか?

ありがとうございます。

答えて

1

あなたがSpring Securityを使用しているように、プリンシパルはSpring Security機構によって正確に設定される可能性があります。しかし、さらにひどい点は、要求ラップを使用することです。つまり、FilterChainが設定されていないため、またはもはや存在しないHttpServletRequestWrapperで設定されているため、FilterChainを呼び出す前にプリンシパルを見つけられません。

だから、ExceptionTranslationFilterの直前にSpring Securityチェーン内にカスタムフィルタを配置して、チェーン化してログに記録し、例外を渡すことをお勧めします。

関連する問題