私はSpringとSpring Securityについて本当に初心者です。Spring Securityについて読んでいて、次のような概念に出会いました。主要、これは現在ログインしているユーザーであるはずです。しかし、現在ログインしているユーザーが複数いる場合はどうなるでしょうか? そこで私の質問は、Spring Security のプリンシパルとは正確には何なのかということです。
たとえば、次のチュートリアルを読みました:
http://www.mkyong.com/spring-security/get-current-logged-in-username-in-spring-security/
また、現在ログインしているユーザーは 1 人だけであるということを考慮しているようですが、実際にはそうではないことがよくあります。
特定のユーザーを取得するにはどうすればよいですか? また、リクエストを実行しているユーザーを区別するにはどうすればよいですか?
ベストアンサー1
校長は現在ログインしているユーザー。ただし、現在のスレッドにバインドされているセキュリティ コンテキストを通じて取得するため、現在のリクエストとそのセッションにもバインドされます。
SecurityContextHolder.getContext()
SecurityContext
内部的には変数を通じて現在の実装を取得しますThreadLocal
。リクエストは単一のスレッドにバインドされているため、これにより現在のリクエスト。
簡単に言えば、セキュリティ コンテキストはセッション内にあり、ユーザー/プリンシパルとロール/権限が含まれていると言えます。
特定のユーザーを取得するにはどうすればよいですか?
必要ありません。すべてのAPIは、ユーザーとセッションへのアクセスを許可するように設計されています。現在のリクエスト。
ユーザー A は現在認証されている 100 人のユーザーのうちの 1 人であるとします。A がサーバーに対してリクエストを発行すると、サーバーはそのリクエストを処理するために 1 つのスレッドを割り当てます。その場合は、SecurityContextHolder.getContext().getAuthentication()
このスレッドのコンテキストで行います。そのスレッド内からは、別のスレッドで処理されるユーザー B のコンテキストにアクセスできません。
リクエストを行っているユーザーをどのように区別すればよいでしょうか?
そうする必要はありません。それは Servlet コンテナが代わりに行います。