Spring Security 3 поддерживает @PreAuthorize
аннотацию, которая позволяет выражать логику авторизации на Spring Expression Language , например:
public class BusinessService {
@PreAuthorize("hasRole('ADMINISTRATOR') or " +
"(#o.status != 'someStatus' and hasRole('USER') and #o.ownerName == principal.name)")
public void updateBusinessObject(BusinessObject o) {
...
}
}
И вам нужно <security:global-method-security pre-post-annotations="enabled"/>
, чтобы применить аспект безопасности.
Если выражение слишком сложное для представления в Spring Expression Language, вы можете переместить некоторую логику в код Java, добавив пользовательские переменные в выражение EvaluationContext
(настроив MethodSecurityExpressionHandler
).
Обратите внимание, однако, что вам нужно скомпилировать код в режиме отладки, чтобы использовать аргументы метода в выражении.
Смотри также: