Получение фактических значений параметров в Jersey ResourceFilterFactory

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

Мой аннотированный метод jax-rs выглядит так:

@GET
@Path("customers")
@Requires(Role.CustomerManager)
public Customer getCustomer(@ParseFromQueryString @CheckPermission final Customer customer) {
    // ...
}

@ParseFromQueryString - это аннотация, которая указывает Джерси (через поставщика Injectable) демаршалировать клиента из строка запроса. Код для этого выглядит следующим образом:

public class QueryStringCustomerInjectable implements Injectable<Customer> {
  public Customer getValue() {
    final Customer customer = new Customer();
    // ... a UriInfo was injected using the @Context annotation
    // ... extract parameters from QueryString and use setters
    return customer;
  }
}

Аннотация @CheckPermission указывает моему настраиваемому авторизатору, что разрешения должны быть проверены для клиента. Некоторые пользователи имеют доступ к информации о некоторых клиентах. Аналогичным образом, аннотация @Requires принимает роль, которую должен иметь вызывающий. Это не роли безопасности Java (строки), а, скорее, значения перечисления.

Используя ResourceDebuggingFilter Джерси в качестве отправной точки, я смог понять, какой метод будет вызван . Однако я до сих пор не понял, как определить, какие параметры будут фактически использоваться для вызова метода.

В верхней части моей головы я могу придумать два обходных пути:

  1. Перехватчик метода с использованием Guice + Джерси.
  2. Закодируйте эту логику в QueryStringCustomerInjectable , но это кажется немного небрежным. Это был бы класс, делающий слишком много .

Тем не менее, я бы действительно хотел сделать это, используя только Jersey / JAX-RS. Я чувствую себя так близко!

Идеи? Указатели?

Спасибо!

19
задан chahuistle 10 June 2011 в 14:29
поделиться