Как использовать Spring Security3.0.3 для защиты такой бизнес-логики? - PullRequest
0 голосов
/ 01 ноября 2010

У меня есть такое требование.Существует основной бизнес-объект, пользователь a и пользователь b, а также администратор.Пользователь a или b может создавать / обновлять / удалять свой бизнес-объект.И пользователь a не может изменить бизнес-объект пользователя b.Администратор может сделать все.И бизнес-объект имеет статус, в каком-то статусе, даже пользователь-владелец не может изменить его.Я хочу обеспечить это с помощью весенней безопасности. Но, кажется, можно добиться этого только с помощью ролевой безопасности.Я чувствую, что мне нужно использовать весеннего избирателя, но я не знаю, как настроить.Кто-нибудь может предоставить какой-нибудь фрагмент кода или дать мне предложение?

Заранее спасибо.

1 Ответ

0 голосов
/ 01 ноября 2010

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).

Обратите внимание, однако, что вам нужно скомпилировать код в режиме отладки, чтобы использовать аргументы метода в выражении.

Смотри также:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...