Аннотация уровня нового метода безопасности Spring

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

Для этого у меня есть такой набор аннотаций:

@PostFilter("#canViewOwnAssignment.canView(filterObject) or #canViewAllAssignments.canView(filterObject)") @PreAuthorize("hasAnyAuthority('canViewOwnAssignment', 'canViewAllAssignments') and (#canViewOwnAssignment.canEnter(userId) or #canViewAllAssignments.canEnter(userId))")

... для всех методов. Единственное, что отличается от приведенного выше фрагмента, - это canViewOwnAssignment и параметр (ы) .canEnter ().

Я хотел бы упростить это, чтобы я мог иметь аннотацию sg следующего вида: @MyAnnotation(bean = CanViewAssignment.class, args = {"userId"})

Как я мог это сделать?

Я попытался расширить PrePostAnnotationSecurityMetadataSource.class, поскольку он анализирует аннотации, однако я не могу просто использовать @Primary, чтобы переопределить его, поскольку экземпляр bean-компонента запечен в GlobalMethodSecurityDefinitionParser.class

Если мне это не нужно, я бы предпочел не переписывать половину Spring Security, только чтобы иметь один замещающий метод.

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

Roman Vottner 10.08.2018 16:40

Есть несколько похожих вопросов: stackoverflow.com/questions/18097152/…, stackoverflow.com/questions/45090693/… и stackoverflow.com/questions/33784202/…. Все без ответа. Следовательно, очень вероятно, что выхода нет.

dur 10.08.2018 19:14
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
144
0

Другие вопросы по теме