Читаем Изучаем Java EE 7 полностью

····timerService.createCalendarTimer(birthDay, new TimerConfig(customer, true));

··}

··@Timeout

··public void sendBirthdayEmail(Timer timer) {

····Customer customer = (Customer) timer.getInfo();

····//…

··}

}

После создания таймера контейнер будет вызывать метод @Timeout (sendBirthdayEmail()) каждый год. В него будет передаваться объект типа Timer. Поскольку таймер был сериализован вместе с объектом типа customer, метод может получить к нему доступ, вызвав метод getInfo(). Обратите внимание, что компонент может иметь не более одного метода, аннотированного @Timeout, для работы с таймерами, создаваемыми программно.

<p>Авторизация</p>

Основная цель модели безопасности EJB заключается в управлении доступом к бизнес-коду. В Java EE аутентификация обрабатывается на веб-уровне (или в клиентском приложении), принципал и его роль передаются на уровень EJB, а EJB проверяет, может ли аутентифицированный пользователь получить доступ к методу, основываясь на заданной роли. Авторизация может быть реализована либо декларативным, либо программным образом.

Если вы выберете декларативную авторизацию, то контроль доступа будет осуществляться контейнером EJB. При программной авторизации контроль доступа производится в коде с использованием JAAS API.

<p>Декларативная авторизация</p>

Декларативная авторизация может быть определена в компоненте с помощью аннотаций или дескриптора развертывания XML. Декларативная авторизация включает в себя объявление ролей, назначение уровня доступа методам (или всему компоненту) либо временное изменение сущности безопасности. Эти элементы управления созданы с помощью аннотаций, описанных в табл. 8.6. Каждая аннотация может быть использована как для компонента, так и для метода.

Таблица 8.6. Аннотации, связанные с безопасностью
АннотацияКомпонентМетодОписание
@PermitAllXXОзначает, что заданный метод (или целый компонент) доступен для всех (доступ для всех ролей)
@DenyAllXXОзначает, что ни одна роль не может выполнять заданный метод или все методы компонента (доступа нет ни у одной роли). Это может быть полезно, если вы хотите запретить доступ к методу в определенных условиях (например, метод launchNuclearWar() должен быть доступен только на производстве, но не при тестировании)
@RolesAllowedXXОзначает, что существует список ролей, позволяющих запускать заданный метод (или весь компонент)
@DeclareRolesXОпределяет роли для проверки безопасности
@RunAsXВременно назначает новую роль принципала

Аннотация @RolesAllowed используется для того, чтобы указать, каким ролям будет доступен метод. Она может быть применена к конкретному методу или всему компоненту (в этом случае все бизнес-методы унаследуют эту роль компонента). Эта аннотация может принимать либо один экземпляр класса String (только одна роль может получить доступ к методу), либо массив экземпляров класса String (любая из ролей может получить доступ к методу). Аннотация @DeclareRoles, которую мы рассмотрим далее в этом разделе, может быть использована для объявления других ролей.

Примечание

Аннотации безопасности (@RolesAllowed, @DenyAll и т. д.) являются частью спецификации Common Annotations 1.2 (JSR 250) и располагаются в пакете javax.annotation.security.

В листинге 8.5 показан класс ItemEJB, использующий аннотацию @RolesAllowed на уровне компонента и методов. Этот код указывает, что любой метод доступен принципалу, связанному с одной из следующих ролей: user, employee или admin. Метод deleteBook() переопределяет настройки уровня класса, открывая доступ только роли admin.

Листинг 8.5. Не сохраняющий состояние компонент, который открывает доступ определенным ролям

@Stateless

@RolesAllowed({"user", "employee", "admin"})

public class ItemEJB {

··@PersistenceContext(unitName = "chapter08PU")

··private EntityManager em;

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных