現在、Web アプリケーションと REST サービスの 2 つのチャネルを持つ spring-mvc アプリケーションがあります。どちらにもユーザーの http セッションがあり、サービス クラスで「現在のユーザー」を簡単に取得できます。
ここで、http セッションがなく、現在のユーザーが要求パラメーターに依存する別の REST サービスを開発する必要があります。したがって、コントローラーはその要求パラメーターを読み取り、現在のユーザーを見つけます。
1.現在のユーザーをパラメーターとして受け入れるようにサービスレイヤーメソッドを変更するか、2.httpセッションから現在のユーザーを取得するクラスを変更するだけです。
また、監査ログを作成する必要があり、そのために Spring AOP を使用します。アスペクトは「現在のユーザー」にもアクセスする必要があります。したがって、オプション #1 はおそらく私にはうまくいかず、#2 を使用します。
オプション #2 では、現在のユーザーを ThreadLocal 変数に入れるインターセプターを作成します。新しい REST サービスのコントローラーは同じことを行い、サービス レイヤーと監査ログの側面で、そこから現在のユーザーを取得できます。
私は以前にこのようなことをしたことがなく、より良いアプローチがあるかどうか疑問に思っていました. または、このアプローチでどのような問題が予想されるか。
コメントやアイデアをいただければ幸いです。
オズ
現在、現在のユーザーを取得する方法は次のとおりです。
@Override
public User getCurrentUser()
{
Authentication currentUser = getAuthentication();
return userService.getByLoginName(currentUser.getName());
}
protected Authentication getAuthentication()
{
return SecurityContextHolder.getContext().getAuthentication();
}