java - Jersey REST 扩展方法

标签 java rest jersey jax-rs webresource

我想知道是否可以使用 Jersey Restful 资源执行以下操作:

我有一个示例 Jersey 资源:

@Path("/example")
public class ExampleRessource {


  @GET
  @Path("/test")
  @CustomPermissions({"foo","bar"})
  public Response doStuff() {
    //implicit call to checkPermissions(new String[] {"foo","bar"}) 

  }  

  private void checkPermissions(String[] permissions) {
    //stuff happens here
  }

}

我想要实现的是:在执行每个资源的方法之前,通过调用 checkPermissions 方法隐式检查注释中的权限,而无需在方法体内实际编写调用。某种“装饰”此资源中的每个 Jersey 方法。

有没有优雅的解决方案?例如 Jersey 提供商?

谢谢!

最佳答案

配合 Jersey 2 可以使用ContainerRequestFilter

@Provider
public class CheckPermissionsRequestFilter 
                                     implements ContainerRequestFilter {
    @Override
    public void filter(ContainerRequestContext crc) throws IOException {

    }  
}

我们可以通过 ResourceInfo 获取被调用方法上的注解类

@Context
private ResourceInfo info;

@Override
public void filter(ContainerRequestContext crc) throws IOException {
    Method method = info.getResourceMethod();
    CheckPermissions annotation = method.getAnnotation(CheckPermissions.class);
    if (annotation != null) {
        String[] permissions = annotation.value();
    }
} 

您可以使用此注释

@NameBinding
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface CheckPermissions {
    String[] value();
}

并用@CheckPermissions({...})注释资源类或资源方法



更新

上面的注释也允许注释类。为了完整性,您还需要检查该类。类似的东西

Class resourceClass = info.getResourceClass();
CheckPermissions checkPermissions = resourceClass.getAnnotation(CheckPermissions.class);
if (checkPermissions != null) {
   String[] persmission = checkPermissions.value();
}

关于java - Jersey REST 扩展方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27862594/

相关文章:

Java向xml文件添加具有属性的元素

java - 使用 XPath 检索 XML 元素

c# - REST 标准 - 输出模型是否应该始终匹配输入模型?

javascript - 从 javascript 中现有的对象克隆一个新对象

java - Wildfly PathParam 上的 Rest 服务为空

java - 无法将 json 字符串解析为通用 java 对象

java - 在同一个项目中使用 spring mvc 应用程序和 jersey 是否存在潜在问题?

java - 使用在下一个 `INSERT OR IGNORE` 语句中插入 `INSERT` 的 ID

java - 在 web.xml [weblogic] 中映射根

java - Jersey REST api 过滤和排序正确