【问题标题】:Portable security role mapping with jdbc realms与 jdbc 领域的可移植安全角色映射
【发布时间】:2011-12-03 13:03:35
【问题描述】:

我正在完成一个 Java EE 6 应用程序。该应用程序是使用 GlassFish 开发的,但我想让它可以跨不同的应用程序服务器移植。

已通过在应用程序的 DataSource 中定义用户和组以及使用 GlassFish 的 jdbcRealm 来实现安全性。我知道其他 App Server 中也存在类似的实现(虽然我还没有查看详细信息)。

为了使我的应用程序可移植,我需要了解安全角色和主体/用户之间的映射是否可以在应用程序服务器本身或应用程序源代码中定义,而无需使用特定于应用服务器的部署描述符 glassfish-web.xml 或等效项。这将避免部署人员编辑.war 文件的任务,这是我想要的,因为应用程序必须是可移植的。

由于我已将角色映射到具有相同名称的应用程序定义的组,因此我要删除的代码是

  <security-role-mapping>
      <role-name>RoleGroup1</role-name>
      <group-name>RoleGroup1</group-name>
  </security-role-mapping>
  <security-role-mapping>
      <role-name>RoleGroup2</role-name>
      <group-name>RoleGroup2</group-name>
  </security-role-mapping>

【问题讨论】:

  • Glassfish 提供了一个名为“默认主体到角色映射”的设置,如果您保持组和角色相同,它会自动生成这些映射。您可以通过勾选 Configurations > server-config > Security 下的复选框来启用它。我预计其他应用服务器也有类似的特性。由于您需要提供说明来为您部署到的每个应用程序服务器(至少)配置 Realm,因此您可以将此说明添加到这些说明的末尾,而无需填充特定于容器的映射文件。跨度>

标签: java security jakarta-ee deployment portability


【解决方案1】:

根据 EBJ 3.1 规范:

17.2.5.3 声明从 Bean 的代码引用的安全角色

...

如果不使用 DeclareRoles 注解,则 Bean Provider 必须 使用部署描述符的 security-role-ref 元素来 声明代码中引用的安全角色。这 security-role-ref 元素定义如下:

  • 使用角色名称元素声明安全角色的名称。名称必须是 用作参数的安全角色名称 isCallerInRole(String roleName) 方法。

  • 可选择在描述元素中提供安全角色的描述。

另外:

如果使用部署描述符,则 Bean Provider 和/或 Application Assembler 使用安全角色部署描述符 元素如下:

  • 使用 security-role 元素定义每个安全角色。
  • 使用 role-name 元素定义安全角色的名称。
  • (可选)使用描述元素来提供对安全角色的描述。

以下示例说明了安全角色定义 部署描述符。

<assembly-descriptor>
  <security-role>
    <description>
      This role includes the employees of the
      enterprise who are allowed to access the 
      employee self-service application. This role
      is allowed only to access his/her own 
      information.
    </description>
    <role-name>employee</role-name>
  </security-role>

【讨论】:

  • 这不能回答 OP 的问题。 OP 希望在不使用特定于容器的配置文件的情况下将角色映射到委托人。
猜你喜欢
  • 2011-05-08
  • 1970-01-01
  • 2015-04-12
  • 1970-01-01
  • 2023-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-23
相关资源
最近更新 更多