我正在完成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>
答案 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>