Как использовать @DeclareRoles в Джерси-2? - PullRequest
0 голосов
/ 19 февраля 2020

Я пробую свои силы в простом приложении-джерси для нескольких простых API RESTful. Я хочу опробовать ценные бумаги на основе ролей для моих конечных точек API, но не знаю, как?

Следует ли объявлять аннотацию через класс WebService, как показано ниже?

@Slf4j
@Path("/account")
@Autherization
@DeclareRoles("ADMIN", "STUDENT", "TEACHER")
public class AccountService extends SpringApplication {

    private static Logger logger = Logger.getLogger("AuthenticationService");

    @Path("/greet")
    @GET
    @Produces(MediaType.TEXT_PLAIN)
    @PermitAll
    public Response greet(){
        logger.info("Welcome to Tarkshala Scholar Account APIs");
        return getBean(AuthenticationServiceHandler.class).greet();
    }
}

или она должна быть объявлена ​​в фильтрах

1 Ответ

0 голосов
/ 24 февраля 2020

Таким образом, Джерси уже обрабатывает авторизацию для вас с помощью RolesAllowedDynamicFeature. Просто зарегистрируйте его на своем Джерси ResourceConfig. Нет необходимости в @DeclareRoles, так как это механизм EJB. У Джерси есть своя отдельная система обработки ролей.

Что происходит под капотом, так это то, что есть ContainerRequestFilter (с пометкой @Priority(Priorities.AUTHORIZATION)), который проверяет ваши методы ресурсов, чтобы увидеть, какие роли разрешены, а затем получает SecurityContext от ContainerRequestContext и вызывает метод SecurityContext#isUserInRole(String role) для каждой роли, объявленной в @RolesAllowed (если она есть). Если SecurityContext не прошел проверку, Джерси бросает ForbiddenException.

Итак, с учетом сказанного вам нужно сделать для аутентификации создать ContainerRequestFilter (с пометкой @Priority(Priorities.AUTHENTICATION), и в этом фильтре выполнить аутентификацию, а затем создать SecurityContext со всеми ролями для Джерси, чтобы проверить. Этот метод разделяет проблемы; один фильтр для аутентификации (который мы создали) и один фильтр для авторизации (который нам предоставляет Джерси.

Вы можете увидеть пример фильтра аутентификации, который использует Basi c Authentication в этой записи .

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