有没有办法获得一个String []与用户在JSP或Servlet中的角色?
我知道request.isUserInRole("role1"),但我也想知道用户的所有角色.
我搜索了servlet源代码,看起来这是不可能的,但这对我来说似乎很奇怪.
所以...任何想法?
答案很乱.
首先,您需要找出request.getUserPrincipal()在您的webapp中返回的类型.
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);