1. ホーム
  2. spring

Webアプリケーションにログインしている全ユーザーの一覧を表示するには(Spring Security経由で)どうすればよいですか?

2023-11-17 05:28:11

質問

Webアプリケーションでspring securityを使用していますが、私のプログラムにログインしているすべてのユーザのリストが欲しいのです。

どうすればそのリストにアクセスできるのでしょうか?それらはすでにspringフレームワーク内のどこかに保存されていないのでしょうか?たとえば SecurityContextHolder または SecurityContextRepository ?

どのように解決するのですか?

ログインしているすべてのユーザーのリストにアクセスするためには、SessionRegistryのインスタンスをBeanに注入する必要があります。

@Autowired
@Qualifier("sessionRegistry")
private SessionRegistry sessionRegistry;

そして injcted SessionRegistry を使って全てのプリンシパルのリストにアクセスすることができます。

List<Object> principals = sessionRegistry.getAllPrincipals();

List<String> usersNamesList = new ArrayList<String>();

for (Object principal: principals) {
    if (principal instanceof User) {
        usersNamesList.add(((User) principal).getUsername());
    }
}

しかし、セッションレジストリを注入する前に、spring-security.xmlでセッション管理部分を定義する必要があります(以下は Session Managementセクションをご覧ください。 を見てください)、同時実行制御セクションでセッションレジストリオブジェクトのエイリアスを設定する必要があります ( セッションレジストリエイリアス を設定し、それを注入します。

    <security:http access-denied-page="/error403.jsp" use-expressions="true" auto-config="false">
        <security:session-management session-fixation-protection="migrateSession" session-authentication-error-url="/login.jsp?authFailed=true"> 
            <security:concurrency-control max-sessions="1" error-if-maximum-exceeded="true" expired-url="/login.html" session-registry-alias="sessionRegistry"/>
        </security:session-management>

    ...
    </security:http>