Spring Security の「プリンシパル」とは何ですか? 質問する

Spring Security の「プリンシパル」とは何ですか? 質問する

私は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 コンテナが代わりに行います。

おすすめ記事