Я делал некоторые сравнения между Apache Shiro и Spring Security - я действительно люблю модель безопасности, которую использует Широ, и считаю, что она намного чище, чем Spring Безопасность.
Тем не менее, одна большая приятная задача - иметь возможность ссылаться на параметры метода из аннотаций безопасности на уровне метода. Например, прямо сейчас я мог бы что-то вроде:
@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 Безопасность поддерживает выражения Spring EL в своих аннотациях.
Это определенно не особенность Сиро, и поэтому мне придется писать собственные аннотации?
Спасибо,
Эндрю