cha*_*tle 19 java rest authorization jax-rs jersey
我想使用Jersey在我的REST服务中实现自定义授权.此自定义授权检查方法的注释以及方法接收的实际参数.
我的jax-rs注释方法如下:
@GET
@Path("customers")
@Requires(Role.CustomerManager)
public Customer getCustomer(@ParseFromQueryString @CheckPermission final Customer customer) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
这@ParseFromQueryString是一个注释,指示Jersey(通过Injectable提供程序)Customer从查询字符串中解组a .代码如下:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
该@CheckPermission注释指示我的自定义authoriser该权限是对客户进行检查.有些用户可以访问某些客户的信息.类似地,@Requires注释扮演调用者应具有的角色.这些不是java的安全角色(字符串),而是它们是枚举值.
使用Jersey ResourceDebuggingFilter作为起点,我已经能够知道将调用哪个方法.但是,我仍然没有想出如何确定实际使用哪些参数来调用该方法.
在我的头脑中,我可以想到两个工作:
QueryStringCustomerInjectable,但这看起来有点草率.这会是一个做得太多的课.然而,我真的想只使用Jersey/JAX-RS来做这件事.我觉得我太近了!
想法?指针?
谢谢!
对于客户反序列化,您可以实现 javax.ws.rs.ext.ParamConverterProvider 并将其注册到 Jersey 中。然后您可以使用 @QueryParam("customer") 将其注入到您的方法中。它更加灵活,因为您也可以将它与 @BeanParam 或 @PathParam 注释一起使用。
然后您可以使用ContainerRequestFilter。请参阅 jersey 如何执行 Oauth1 例如OAuth1ServerFilter。接下来您可以做的就是创建一个功能来注册新创建的过滤器(请参阅Oauth1ServerFeature以获取参考 - 我现在找不到源代码)。
祝你好运!
| 归档时间: |
|
| 查看次数: |
1344 次 |
| 最近记录: |