私はSpring 3.1を使ってJava Webアプリケーションを持っています。 My Springセキュリティコンテキストは、それぞれが異なる認証パス(例えば、ユーザ名/パスワード対シングルサインオン)に対応する複数の認証フィルタを定義する。各認証フィルタは、独自のAuthenticationSuccessHandler
を定義します。今、すべての認証タイプを、私は成功した認証時に取るように2つの追加アクションを注入したい、と彼らは全体に適用する必要があります複数のAuthenticationSuccessHandlersを最も簡単に呼び出す方法は?
- 設定Google Analyticsは、フロントエンドで使用するための追跡イベントコード
- データベースのユーザーの優先ロケールを更新してください。
これらは、ユーザーが正常に認証された後にフックしたい任意のアクションです。重要な点は、通常のAuthenticationSuccessHandlers(認証パスごとに異なる)とは異なり、要求を転送またはリダイレクトしないことです。だから、それらの束を呼び出すことは安全です。
Spring Web/Security 3.1を使用して、これらの追加の認証成功「アクション」を統合する明確な方法はありますか?
私はApplicationListener<AuthenticationSuccessEvent>
を実装するに見えたが、私のイベントは、リクエストにアクセスする必要がある、とAuthenticationSuccessEvent
が提供するすべてのAuthentication
オブジェクトそのものです。
私は方法を見つけることができませんでしたので、私は私自身のプロキシをロールバックすることを決めた:
public class AuthenticationSuccessHandlerProxy implements AuthenticationSuccessHandler {
private List<AuthenticationSuccessHandler> authenticationSuccessHandlers;
public AuthenticationSuccessHandlerProxy(List<AuthenticationSuccessHandler> successHandlers) {
this.authenticationSuccessHandlers = successHandlers;
}
@Override
public void onAuthenticationSuccess(HttpServletRequest request,
HttpServletResponse response,
Authentication authentication) throws IOException, ServletException {
for (AuthenticationSuccessHandler successHandler : this.authenticationSuccessHandlers) {
successHandler.onAuthenticationSuccess(request, response, authentication);
}
}
}