如何在JSP/Servlet中获取用户角色

Alf*_*TeK 11 java authentication jboss jsp servlets

有没有办法获得一个String []与用户在JSP或Servlet中的角色?

我知道request.isUserInRole("role1"),但我也想知道用户的所有角色.

我搜索了servlet源代码,看起来这是不可能的,但这对我来说似乎很奇怪.

所以...任何想法?

Ste*_*eod 12

答案很乱.

首先,您需要找出request.getUserPrincipal()在您的webapp中返回的类型.

    System.out.println("type = " + request.getUserPrincipal().getClass());
Run Code Online (Sandbox Code Playgroud)

假设返回org.apache.catalina.realm.GenericPrincipal.

然后将getUserPrincipal()的结果转换为该类型并使用它提供的方法.

    final Principal userPrincipal = request.getUserPrincipal();
    GenericPrincipal genericPrincipal = (GenericPrincipal) userPrincipal;
    final String[] roles = genericPrincipal.getRoles();
Run Code Online (Sandbox Code Playgroud)

我说它会变得凌乱.它也不是很便携.

  • 它返回类org.jboss.security.SimplePrincipal并且该类没有getRoles()...这是非常愚蠢的......对不起,我应该提到:我正在使用JBoss 4.2.3GA AS (2认同)

Jos*_*osh 6

读入所有可能的角色,或硬编码列表.然后迭代它运行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);
Run Code Online (Sandbox Code Playgroud)