29

現在のユーザーのロールをデータベースからロードしました。また、JSP で spring セキュリティ式を使用してユーザー ロールにアクセスし、hasRole で許可されていないオプションと URL を非表示にすることができます。今、私はそれをサーブレットに入れ、ログに表示したい(またはユーザーオブジェクトセッションに保存したい)。どうすればそれを達成できますか?

4

6 に答える 6

75

あなたはこのようなことを試すことができます:

Collection<SimpleGrantedAuthority> authorities = (Collection<SimpleGrantedAuthority>)    SecurityContextHolder.getContext().getAuthentication().getAuthorities();

Authority変数にロールのコレクションがあります。

于 2012-04-10T17:15:09.697 に答える
35

Java 8 で開発する場合は、より簡単になります。

すべてのユーザー ロールを取得するには:

Authentication authentication = SecurityContextHolder.getContext().getAuthentication();

Set<String> roles = authentication.getAuthorities().stream()
     .map(r -> r.getAuthority()).collect(Collectors.toSet());

ユーザーが特定のロール ( ROLE_USERなど) を持っているかどうかを確認するには:

Authentication authentication = SecurityContextHolder.getContext().getAuthentication();

boolean hasUserRole = authentication.getAuthorities().stream()
          .anyMatch(r -> r.getAuthority().equals("ROLE_USER"));
于 2017-03-21T21:17:58.550 に答える
7

HttpServletRequest からgetUserPrincipal()を呼び出してみてください。

于 2012-04-10T17:11:07.717 に答える