Spring Security/Конфигурирование с помощью пространства имён: различия между версиями

Содержимое удалено Содержимое добавлено
Строка 413:
 
= Защита методов =
Начиная с версии 2.0 в Spring Security улучшена поддержка безопасности методов, расположенных на сервисном уровне. Имеется поддержка как аннотаций безопасности JSR-250, так и оригинальных @Secured аннотаций фреймворка. Начиная с версии 3.0 вы можете также использовать новые, основанные на выражениях, аннотации. Вы можете применить систему безопасности к одному бину, используя элементы перехвата-методов при объявлении бина или можете защитить несколько бинов по всему уровню сервисов, используя точки срезов в стиле AspectJ.
 
== Элемент <global-method-security> ==
Этот элемент используется чтобы включить возможность использования системы безопасности, основанной на аннотациях (путем установки соответствующих атрибутов у элементов), а также для того чтобы собрать в одном месте все объявления системы безопасности, которые будут действовать в контексте всего приложения. Вы должны только объявить один элемент <code><global-method-security></code>. Для включение поддержки Spring Security потребуется аннотация @Secured:
 
<source lang="xml"> <global-method-security secured-annotations="enabled" /></source>
 
Добавление аннотации к методу (класса или интерфейса) будет соответственно ограничивать доступ к этому методу. Родная поддержка аннотаций Spring Security определяет несколько атрибутов для метода. Эти атрибуты затем передаются в <code>AccessDecisionManager</code>, чтобы принять фактическое решение:
 
<source lang="xml">
public interface BankService {
 
@Secured("IS_AUTHENTICATED_ANONYMOUSLY")
public Account readAccount(Long id);
 
@Secured("IS_AUTHENTICATED_ANONYMOUSLY")
public Account[] findAccounts();
 
@Secured("ROLE_TELLER")
public Account post(Account account, double amount);
}
</source>
 
Поддержка аннотаций JSR-250 может быть включена с помощью:
 
<source lang="xml"> <global-method-security jsr250-annotations="enabled" /></source>
 
Они основаны на стандартах и позволяет легко создавать ограничения на основе ролей, которые будут применяться к методам, но они не имеют таких возможностей, как родные аннотации Spring Security. Чтобы воспользоваться новым синтаксисом, основанным на выражениях, вы должны использовать
 
<source lang="xml"> <global-method-security pre-post-annotations="enabled" /></source>
 
и Java код будет выглядеть
 
<source lang="java">
public interface BankService {
 
@PreAuthorize("isAnonymous()")
public Account readAccount(Long id);
 
@PreAuthorize("isAnonymous()")
public Account[] findAccounts();
 
@PreAuthorize("hasAuthority('ROLE_TELLER')")
public Account post(Account account, double amount);
}
</source>
 
Аннотации на основе выражений являются хорошим выбором, если вам нужно определить простые правила, но которые выходят за рамки проверки имен ролей на основе списка пользовательских полномочий. Вы можете использовать в одном приложении более одного типа аннотаций, но должны избегать смешивания аннотации разных типов в одном интерфейсе или классе, чтобы избежать путаницы.
 
=== Добавление срезов с помощью protect-pointcut ===
 
= Примечания =