java - 在 Jersey ResourceFilterFactory 中获取实际参数值

标签 java rest authorization jersey jax-rs

我想使用 Jersey 在我的 REST 服务中实现自定义授权。此自定义授权检查方法上的注释以及实际参数 方法接收。

我的 jax-rs 注释方法如下所示:

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

@ParseFromQueryString 是一个注释,指示 Jersey(通过 Injectable 提供程序)从查询字符串中解码 Customer。代码如下:

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 的安全角色(字符串),而是枚举值。

使用 Jersey 的 ResourceDebuggingFilter 作为起点,我已经能够知道将调用哪个方法。但是,我仍然没有弄清楚如何确定实际使用哪些参数来调用该方法。

在我的脑海中,我可以想到两个解决方法:

  1. 使用 Guice + Jersey 的方法拦截器。
  2. QueryStringCustomerInjectable 中编写此逻辑,但这似乎有点草率。这将是一个类做太多

然而,我真的想只使用 Jersey/JAX-RS 来做到这一点。我觉得我很亲近!

想法?指针?

谢谢!

最佳答案

您应该使用 FiltersInterceptors 来处理有关方法的所有信息。 see Jersey Filter and Interceptors

关于java - 在 Jersey ResourceFilterFactory 中获取实际参数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6304169/

相关文章:

web-services - 如何使用 spring3 保护服务 REST?

java - 我正在构建一个 REST 客户端来访问需要授权 header 的服务,但我不知道如何实现它

java - (Java) JTable 行的用户选择

java - 线条在应该重叠时却没有重叠 Java Swing

java - c++ 可以做这个 java 构建器模式吗?

java - Spring Integration 2 SOAP 调用数据库

java - Alfresco activi 5.* 或 6.* 中的自定义 Rest API

使用 Access ODBC 链接表的 PostgreSQL 授权

c# - User.IsInRole 错误

c# - 如果角色名称包含空格,则无法使 AuthorizeAttribute 工作