Аннотация уровня нового метода безопасности 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
0
2
144
0

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