Во всем этом довольно много сантехники.Более хитрыми частями являются:
- Обработка аннотаций и соблюдение правил ненаследования и переопределения (без ссылки на переопределение xml)
- Обеспечение того, чтобы аннотации не использовались неправильно или применялись неправильно
- Соблюдение xml и переопределение данных аннотации
- Отображение "разрешенных ролей" с объявленными "ролями" (существует уровень косвенности)
- Добавление всех метаданных в виде правильно отформатированных строк разрешений в JACCпровайдер
- Обработка входа через правильно настроенный JAAS LoginModule
- Некоторый творческий код для интеграции JAAS с JACC (стандартного способа сделать это не существует)
- Отслеживание вашего субъекта через
doAs
вызывает или ThreadLocal
- Проксирует все ваши объекты, чтобы вы могли выполнять проверки подлинности до фактического вызова методов
- Изменение контекста безопасности для метода, аннотированного @RunAs, и обеспечение роли RunAsзаявленная роль
- Работа с
EJBContext.getCallerPrincipal()
(у Subject
есть много Principal
objects, поэтому вам нужно выбрать один для возврата и убедиться, что вы можете выбрать один и тот же последовательно) - Подключение
EJBContext.isCallerInRole(String)
к провайдеру JACC - Убедитесь, что вы используете правильные классы исключений, когда выобрабатывать ошибки входа в систему, ошибки авторизации и другие различные условия
Так что делает контейнер.Работа, которую выполняют JAAS и JACC, действительно довольно мала.Конечно, не так подробно ориентированы, по крайней мере.
Ничто из этого не может быть действительно "введено", как вы могли надеятьсяПо сути, безопасность - это общий совет.
На первый взгляд, такие вещи, как безопасность на основе аннотаций, выглядят очень просто.Однако, когда вы исследуете все комбинации, предостережения и условия, это действительно складывается.Я помню все эти детали выше, потому что я все неправильно понял, когда мне впервые пришлось их реализовать.:) Слава Богу за TCK.
Я бы не советовал пытаться создать собственную структуру тестирования безопасности.
Если у вас есть какой-то конкретный способ, которым вы хотели бы, чтобы ваше тестирование происходилосамое разумное было бы просто поучаствовать в OpenEJB или Arquillian.
Все самые крутые возможности в OpenEJB исходили от боли пользователей и людей, которые рассказывали нам: «Мне больно, когда я так поступаю».Мы любим это.Это отличный источник возможностей, отличный способ привлечь новых участников и фантастический способ доказать идеи, которые могут быть полезны для внедрения в спецификацию (например, API-интерфейс Embedded EJBContainer в EJB 3.1).
Я могуДостаточно подчеркнуть, насколько важно участвовать в инновации, а не пытаться ее обойти.Если что-то не соответствует вашим потребностям, требуйте лучшего.
Это последнее утверждение в большей степени относится к миру в целом:)