Я проводил некоторые сравнения между Apache Shiro и Spring Security - мне очень нравится модель безопасности, которую использует Shiro, и считаю, что она намного чище, чем 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 в своих аннотациях.
Разве это не особенность Сиро, и поэтому мне придется писать свои собственные аннотации?
Спасибо
Andrew