Как избежать копирования копий аннотаций hasRole или hasPermission? - PullRequest
0 голосов
/ 07 января 2020

У меня есть множество методов, которые я должен аннотировать с помощью этой аннотации:

@Override
@PostAuthorize("hasPermission(returnObject.id, 'mypackage.SecuredClazz', 'ADMINISTRATION')")
public MyObject findSectionAById(SomeId id) {
    ////the code
}

Аннотация еще более сложная, она включает hasRole и различные hasPermission условия. Многие объекты реализуют mypackage.SecuredClazz и имеют идентификаторы. В результате у меня есть множество аннотаций для вставки копий с одинаковым телом:

@PostAuthorize("hasPermission(returnObject.id, 'mypackage.SecuredClazz', 'ADMINISTRATION')")

Можно ли использовать другую аннотацию или другой способ не копировать всю эту строку в 100 методов?

Ответы [ 2 ]

1 голос
/ 07 января 2020

Вы можете создать собственную аннотацию, которая включает описанную аннотацию:

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@PostAuthorize("hasPermission(returnObject.id, 'mypackage.SecuredClazz', 'ADMINISTRATION')"
public @interface SecuredClazzAuthorized { }

Использование:

@Override
@SecuredClazzAuthorized
public MyObject findSectionAById(SomeId id) { ... }
0 голосов
/ 07 января 2020

Вы можете создать метааннотацию, см. Справочник по безопасности Spring :

Метод мета-аннотаций безопасности

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

@PreAuthorize("#contact.name == authentication.name")

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

@Retention(RetentionPolicy.RUNTIME)
@PreAuthorize("#contact.name == authentication.name")
public @interface ContactPermission {}

Мета аннотации могут использоваться для любых аннотаций безопасности Spring Security. Чтобы соответствовать спецификации, аннотации JSR-250 не поддерживают метааннотации.

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