1

我知道,当用户登录时,我们可以通过以下方式找到用户名

FacesContext context = FacesContext.getCurrentInstance(); 
       HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest();
request.login(username, password);
Principal principal = request.getUserPrincipal();
principal.getName();

但我如何获得用户组(不做任何数据库查询)。

我尝试了以下方法,但它不起作用,它总是为所有组返回 false。

context.getExternalContext().isUserInRole("USER")
request.isUserInRole("USER")
4

2 回答 2

0

我想指出,组和角色是不同的概念。

假设您有一个网络应用程序,其中有人可以写文章,有人只能评论,其他人只能阅读。所以你有三个角色:WRITER、COMMENTER 和 READER。

现在,此 Web 应用程序在您的组织内部使用。组织图提供以下组:PROJECTMANAGER、ARCHITECT、SYSADMIN 和 DEVELOPER。

简而言之,角色与 webapp 相关,组与您的组织图相关。

在 glassfish-web.xml 中,您可以将组和/或用户绑定到角色。例如,PROJECTMANAGER 和 ARCHITECT 是 WRITER,SYSADMIN 是 COMMENTER,而 DEVELOPER 是 READER。

因此,通常没有数据库查询就无法检索用户组。无论如何,一个策略是创建与组同名的角色(在 glassfish-web.xml 中)。此外,在管理控制台中,还有一个标志可以自动将角色映射到组。

于 2012-08-03T12:19:24.127 回答
0

增加 Alf 的信息响应的一些想法:

  1. 一个用户可能属于多个组。

  2. 每个组可能与多个角色相关联。对于 GlassFish 3.1.2,角色和组之间的映射是在 中进行的glassfish-web.xml,即:

    <security-role-mapping>
      <role-name>USER</role-name>
      <group-name>USER</group-name>
    </security-role-mapping>
    
  3. 角色必须在您的网络应用程序中定义,在web.xml

    <security-role>
      <role-name>USER</role-name>
    </security-role>
    

以上将组映射USER到 web 应用程序中的角色USER。当然,您可以选择不同的名称 - 只需在role-name两者的元素中保持相同的值即可。

于 2012-08-04T22:05:39.707 回答