Как использовать RolesAllowed или Secured на сервисном уровне вместо уровня контроллера, когда я использую jax-rs и spring? - PullRequest
0 голосов
/ 21 октября 2019

У меня есть приложение с пользовательской аутентификацией архитектура на основе токенов. Я использую Jersey + Spring и у меня есть реализация ContainerRequestFilter (в стиле jax-rs API)

У меня есть авторизация на уровне контроллера:

@RolesAllowed({PdartRole.USER_ROLE, PdartRole.REVIEWER_ROLE, PdartRole.MANAGER_ROLE, PdartRole.ADMIN_ROLE, PdartRole.EXTERNAL})
@GET
@Produces({ "application/json" })

Все работает отлично! !!

НО теперь мне нужно обезопасить свой слой " service " (объекты bean-объектов Spring) вместо уровня контроллера. Другими словами, мне нужно переместить аннотацию @ RolesAllowed в сервисный уровень.

Не работает стиль API JAX-RS

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

Spring-метод бесполезен

У меня была идея использовать Spring @ Защищенную аннотацию и PermissionEvaluator Реализация ( Spring Style * 1029)*) но здесь это бесполезно, потому что у меня НЕ есть org.springframework.security.core.Authentication объект вообще. У меня есть только java.security.Principal.SecurityContext объект в ContainerRequestContext .

Было бы хорошо, если бы я как-то мог вызвать какой-то метод авторизации, когда сервисный уровеньвызывается. Конечно, я могу использовать Spring AOP и вручную проверить все, но, может быть, уже есть какое-то другое решение?

У вас есть идеи?

...