Внедрение EJB-безопасности поэтапно с помощью ролей: поставщик компонентов, ассемблер приложений, средство развертывания
В спецификации "JSR 318: Enterprise JavaBeansTM, версия 3.1" упоминаются роли в качестве поставщика компонентов, сборщика приложений, администратора развертывания и системного администратора в качестве основных участников создания EJB.
Ниже показано, как каждая роль влияет на перспективу безопасности:
- Bean Privider: используйте аннотации, такие как @RolesAllowed, @DeclareRoles и т. Д., Чтобы определить логическое представление безопасности отдельного корпоративного компонента.
- Application Assembler: изменение / создание дескриптора развертывания определяет логическое представление безопасности всего приложения. Сопоставляет ссылки на роли безопасности с ролями безопасности.
Не следует путать с группами пользователей, пользователями, принципалами, которые существуют в системной среде целевого предприятия. Они обрабатываются Deployer. - Deployer: Deployer следит за тем, чтобы роли, необходимые для Application Assembler, были доступны в целевой системе. Сопоставляет представление безопасности, указанное Application Assembler, с механизмами и политиками, используемыми доменом безопасности в целевой операционной среде.
- Системный администратор: Системный администратор настраивает пользователей и управляет их членством в группах.
Пример вывода каждой роли:
Поставщик бинов: 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>
Deployer (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.