Могу ли я использовать выражения в аннотациях безопасности Apache Shiro?

Я провел несколько сравнений между Apache Shiro и Spring Security - мне очень нравится модель безопасности, которую использует Широ, и считаю, что она намного чище, чем Spring Security.

Однако, одна большая приятная вещь - это возможность ссылаться на параметры метода из аннотаций безопасности на уровне метода. Например, прямо сейчас я мог бы сделать что-то вроде:

@RequiresPermissions("account:send:*")
public void sendEmail( EmailAccount account, String to, String subject, String message) { ... }

В контексте этого примера это означает, что аутентифицированный пользователь должен иметь разрешение на отправку электронных писем на учетные записи электронной почты.

Однако это недостаточно детализировано. , так как мне нужны разрешения на уровне экземпляра! В этом контексте предположим, что пользователи могут иметь разрешения на экземпляры учетных записей электронной почты. Итак, я хотел бы написать предыдущий код примерно так:

@RequiresPermissions("account:send:${account.id}")
public void sendEmail( EmailAccount account, String to, String subject, String message) { ... }

Таким образом, строка разрешения ссылается на параметр, переданный в метод, так что метод может быть защищен от конкретного экземпляра EmailAccount.

Я знаю, что могу легко сделать это из простого Java-кода внутри метода, но было бы здорово добиться того же, используя аннотации - я знаю, что Spring Security поддерживает выражения Spring EL в своих аннотациях.

Разве это определенно не является особенностью Широ, и поэтому мне придется писать свои собственные аннотации?

Спасибо,

Эндрю

35
задан yorkw 17 July 2012 в 04:55
поделиться