我想使用 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
作为起点,我已经能够知道将调用哪个方法。但是,我仍然没有弄清楚如何确定实际使用哪些参数来调用该方法。
在我的脑海中,我可以想到两个解决方法:
- 使用 Guice + Jersey 的方法拦截器。
- 在
QueryStringCustomerInjectable
中编写此逻辑,但这似乎有点草率。这将是一个类做太多。
然而,我真的想只使用 Jersey/JAX-RS 来做到这一点。我觉得我很亲近!
想法?指针?
谢谢!
最佳答案
您应该使用 Filters
或 Interceptors
来处理有关方法的所有信息。
see Jersey Filter and Interceptors
关于java - 在 Jersey ResourceFilterFactory 中获取实际参数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6304169/