规范" JSR 318:Enterprise JavaBeansTM,版本3.1"将角色称为Bean Provider,Application Assembler,Deployer和System Administrator作为EJB创建的主要角色。
下面每个角色如何为安全预期做出贡献:
每个角色输出的示例:
Bean提供者: TestBean.java
@Stateless
public class TestBean {
@RolesAllowed({"APP-ADMIN"})
public void sayHello() {
}
}
ejb-jar.xml
<ejb-jar>
<enterprise-beans>
<session>
<ejb-name>TestBean</ejb-name>
<ejb-class>org.ejb.test.TestBean</ejb-class>
<session-type>Stateless</session-type>
</session>
</enterprise-beans>
</ejb-jar>
Application Assembler:具有Deployer必须在目标环境的安全域中映射的所有逻辑角色的列表。
ejb-jar.xml中
<ejb-jar>
<enterprise-beans>
<session>
<ejb-name>TestBean</ejb-name>
<ejb-class>org.ejb.test.TestBean</ejb-class>
<session-type>Stateless</session-type>
<security-role-ref>
<role-name>APP-ADMIN</role-name>
<role-link>ADMIN</role-link>
</security-role-ref>
</session>
</enterprise-beans>
<assembly-descriptor>
<security-role>
<role-name>ADMIN</role-name>
</security-role>
<method-permission>
<role-name>ADMIN</role-name> <!-- or APP-ADMIN ?-->
<method>
<ejb-name>TestBean</ejb-name>
<method-name>sayHello</method-name>
</method>
</method-permission>
</assembly-descriptor>
</ejb-jar>
部署人员(jboss 4.2.3-GA env):创建安全域并为企业应用程序分配主体领域
登录-config.xml中
<application-policy name = "MyUserSecurityDomain">
<authentication>
<login-module code = "org.jboss.security.auth.spi.DatabaseServerLoginModule" flag = "required">
<module-option name = "unauthenticatedIdentity">guest</module-option>
<module-option name = "dsJndiName">java:/jdbc/MyServerDS</module-option>
<module-option name = "hashAlgorithm">MD5</module-option>
<module-option name = "hashEncoding">HEX</module-option>
<module-option name = "principalsQuery">SELECT password FROM app_user WHERE username = ? </module-option>
<module-option name = "rolesQuery">SELECT role, 'Roles' FROM app_user WHERE username = ? </module-option>
</login-module>
</authentication>
系统管理员:确保希望使用企业应用程序的app_user数据库表中的用户具有角色ADMIN。
任何人都可以提供更完整的例子吗?或者随意添加可能丢失的任何内容或修改给定示例中可能出错的内容? 安全流程的完整示例对于许多学习EJB或希望获得Oracle Certification Expert 1Z0-895的人员非常有用。