ユーザーが JSP またはサーブレットで持つロールで String[] を取得する方法はありますか?
request.isUserInRole("role1") については知っていますが、ユーザーのすべての役割も知りたいです。
サーブレットのソースを検索しましたが、これは不可能のようですが、私には奇妙に思えます。
それで...何かアイデアはありますか?
ユーザーが JSP またはサーブレットで持つロールで String[] を取得する方法はありますか?
request.isUserInRole("role1") については知っていますが、ユーザーのすべての役割も知りたいです。
サーブレットのソースを検索しましたが、これは不可能のようですが、私には奇妙に思えます。
それで...何かアイデアはありますか?
答えはむずかしい。
最初に、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();
ぐちゃぐちゃになると言っていました。携帯性もあまり良くありません。
考えられるすべてのロールを読み込むか、リストをハードコーディングします。次に、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);