使用jdbc域进行可移植安全角色映射

时间:2011-12-03 13:03:36

标签: java security java-ee deployment portability

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

通过在应用程序的DataSource中定义用户和组来实现安全性,因此使用GlassFish的jdbcRealm。我知道在其他App Server中存在类似的实现(虽然我还没有看过细节)。

为了使我的应用程序可移植,我需要了解安全角色和主体/用户之间的映射是否可以在应用服务器本身或应用程序源代码中定义,而无需使用特定于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>

1 个答案:

答案 0 :(得分:-1)

根据EBJ 3.1规范:

  

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

     

...

     

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

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

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

  •   

此外:

  

如果使用部署描述符,则为Bean Provider和/或   Application Assembler使用security-role部署描述符   要素如下:

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

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

<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>