7

Webアプリケーションにすべてのログインを記録したい。を介して行われるログインにアクセスできましたが、UsernamePasswordAuthenticationFilterremember-me機能を使用してログインするユーザーをログに記録する方法がわかりません。オーバーライドしてみました

createSuccessfulAuthentication(HttpServletRequest request, UserDetails user)

のですTokenBasedRememberMeServicesが、remember-meサービスがユーザーを再認証するため、ログアウトも記録されます。

4

3 に答える 3

8

認証の成功と失敗をログに記録する最良の方法は、Springを使用することApplicationListenerです。

Spring Securityは、認証の成功と失敗に関するさまざまなイベントを公開しており、これらをリッスンできます。リソースへのアクセスが拒否された場合にも、イベントが公開されます。

あなたはLoggerListener例として見ることができます。それらの1つをアプリケーションコンテキストに追加することから始めてください。そうすれば、警告レベルで認証イベントが自動的にログに記録されます。

記憶記憶ログインに関しては、ログアウトしてすぐにサイトにアクセスし、記憶記憶Cookieを使用して再認証された場合、技術的には他の記憶記憶認証と同じであるため、できることはあまりありません。それについて。

ただし、ログアウト成功URLがremember-meフィルターを通過していて、それが新しいセッションの作成方法である場合(ユーザーからの追加のアクションなしで)、セキュリティフィルターチェーンからそのページを省略します。

于 2012-07-08T14:45:36.530 に答える
6

成功した各ログインをログに記録するには、LoginSucessHandlerを作成し、remember-meだけでなく通常のログインにもauthentication-success-handlerを指定するのが最善の方法だと思います。私は以下のコードと構成でこれを行いました。

@Service
public class LoginSucessHandler extends
        SavedRequestAwareAuthenticationSuccessHandler {

    @Override
    public void onAuthenticationSuccess(HttpServletRequest request,
            HttpServletResponse response, Authentication authentication)
            throws ServletException, IOException {
        User user = (User) authentication.getPrincipal();
            // record login success of user
        super.onAuthenticationSuccess(request, response, authentication);
    }

}

<http auto-config="true" use-expressions="true">
    <form-login login-page="/login"
        authentication-failure-url="/login.hst?error=true"
        **authentication-success-handler-ref="loginSucessHandler"** />
    <logout invalidate-session="true" logout-success-url="/home"
        logout-url="/logout" />
    <remember-me key="jbcp" **authentication-success-handler-ref="loginSucessHandler"**/>
    <session-management>
    <concurrency-control max-sessions="1" />
</session-management>
</http>
于 2012-07-09T05:15:19.953 に答える
0

あなたのケースでは、アプリケーションへのすべてのリクエストを傍受するカスタムフィルターを使用するときに解決策に役立つと思います。このフィルターでは、すべてのリクエストのユーザー名をログに記録できます。

ここでは、カスタム フィルタを追加する方法について説明しました。機能を必要なものに変更するだけです。また、web.xml のセキュリティ フィルター チェーンの後にフィルターを配置することを忘れないでください。

于 2012-07-06T06:32:30.930 に答える