11

ユーザーが JSP またはサーブレットで持つロールで String[] を取得する方法はありますか?

request.isUserInRole("role1") については知っていますが、ユーザーのすべての役割も知りたいです。

サーブレットのソースを検索しましたが、これは不可能のようですが、私には奇妙に思えます。

それで...何かアイデアはありますか?

4

4 に答える 4

12

答えはむずかしい。

最初に、webapp で request.getUserPrincipal() が返すタイプを確認する必要があります。

    System.out.println("type = " + request.getUserPrincipal().getClass());

org.apache.catalina.realm.GenericPrincipal を返すとしましょう。

次に、getUserPrincipal() の結果をその型にキャストし、それが提供するメソッドを使用します。

    final Principal userPrincipal = request.getUserPrincipal();
    GenericPrincipal genericPrincipal = (GenericPrincipal) userPrincipal;
    final String[] roles = genericPrincipal.getRoles();

ぐちゃぐちゃになると言っていました。携帯性もあまり良くありません。

于 2008-12-05T15:22:58.627 に答える
7

考えられるすべてのロールを読み込むか、リストをハードコーディングします。次に、isUserInRole を実行して反復し、ユーザーが属するロールのリストを作成してから、リストを配列に変換します。

String[] allRoles = {"1","2","3"};
HttpServletRequest request = ... (or from method argument)
List userRoles = new ArrayList(allRoles.length);
for(String role : allRoles) {
 if(request.isUserInRole(role)) { 
  userRoles.add(role);
 }
}

// I forgot the exact syntax for list.toArray so this is prob wrong here
return userRoles.toArray(String[].class);
于 2008-12-05T15:41:49.650 に答える