Читаем Изучаем 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, для работы с таймерами, создаваемыми программно.

Авторизация

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

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

Декларативная авторизация

Декларативная авторизация может быть определена в компоненте с помощью аннотаций или дескриптора развертывания 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;

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

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

C# 4.0: полное руководство
C# 4.0: полное руководство

В этом полном руководстве по C# 4.0 - языку программирования, разработанному специально для среды .NET, - детально рассмотрены все основные средства языка: типы данных, операторы, управляющие операторы, классы, интерфейсы, методы, делегаты, индексаторы, события, указатели, обобщения, коллекции, основные библиотеки классов, средства многопоточного программирования и директивы препроцессора. Подробно описаны новые возможности C#, в том числе PLINQ, библиотека TPL, динамический тип данных, а также именованные и необязательные аргументы. Это справочное пособие снабжено массой полезных советов авторитетного автора и сотнями примеров программ с комментариями, благодаря которым они становятся понятными любому читателю независимо от уровня его подготовки. Книга рассчитана на широкий круг читателей, интересующихся программированием на C#.Введите сюда краткую аннотацию

Герберт Шилдт

Программирование, программы, базы данных
97 этюдов для архитекторов программных систем
97 этюдов для архитекторов программных систем

Успешная карьера архитектора программного обеспечения требует хорошего владения как технической, так и деловой сторонами вопросов, связанных с проектированием архитектуры. В этой необычной книге ведущие архитекторы ПО со всего света обсуждают важные принципы разработки, выходящие далеко за пределы чисто технических вопросов.?Архитектор ПО выполняет роль посредника между командой разработчиков и бизнес-руководством компании, поэтому чтобы добиться успеха в этой профессии, необходимо не только овладеть различными технологиями, но и обеспечить работу над проектом в соответствии с бизнес-целями. В книге более 50 архитекторов рассказывают о том, что считают самым важным в своей работе, дают советы, как организовать общение с другими участниками проекта, как снизить сложность архитектуры, как оказывать поддержку разработчикам. Они щедро делятся множеством полезных идей и приемов, которые вынесли из своего многолетнего опыта. Авторы надеются, что книга станет источником вдохновения и руководством к действию для многих профессиональных программистов.

Билл де Ора , Майкл Хайгард , Нил Форд

Программирование, программы, базы данных / Базы данных / Программирование / Книги по IT