Java (Jersey 2 + Grizzly 2) JAX-RS 端点的自定义资源注释?

标签 java servlets jersey jax-rs grizzly

我想用某种“角色”属性来注释我的所有 JAX-RS 资源,该属性将由访问控制过滤器通过上下文读取。此类 JAX-RS 资源的示例是(psuedo):

@Path("foo")
public class FooResource {

    @GET
    @Context(roles = "admin,user")
    public Response foo() {
      return Response.noContent().build();
    }
}

因此,AccessControlFilter 将有权访问特定于资源的“角色”值:

public class AccessControlFilter {
  @Override
  public void filter(ContainerRequestContext context) throws IOException {
    String accessToken = accessToken(context);
    String roles = context.getContext("roles");    

    // ... validate access Token against roles ...

  }

  @Nullable
  private static String accessToken(ContainerRequestContext context) {
    Map<String, Cookie> cookies = context.getCookies();
    Cookie accessTokenCookie = cookies.get("access_token");
    if (accessTokenCookie != null) {
      return accessTokenCookie.getValue();
    }
    return null;
  }
}

我一直在挖掘:

最佳答案

只需将 ResourceInfo 注入(inject)过滤器类即可。从那里您可以获取资源Method。然后只需使用一些反射来获取注释即可。

@Context
private ResourceInfo resourceInfo;

@Override
public void filter(...) {
    Method method = resourceInfo.getResourceMethod();
    MyAnnotation anno = method.getAnnotation(MyAnnotation.class);
    if (anno != null) {
        String roles = anno.value();
    }
}

关于Java (Jersey 2 + Grizzly 2) JAX-RS 端点的自定义资源注释?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41370315/

相关文章:

java - 引用 root 的 Tomcat servlet 相对路径

Java Spark Collect() javaRdd 因内存错误而失败(EMR 集群)

java - ServletOutputStream.write 有时会抛出索引越界

java - servlet 中 "response.setContentType("text/html")"的用途是什么

java - JAX-RS/ Jersey +文本/xml : can I specify a xml-stylesheet?

java - 哪本书最适合学习 Android 中的 Web 服务?

java - SnakeYAML 转储嵌套键

eclipse - 定义字段时出现 java.lang.NoSuchFieldError 异常

web-services - com.sun.jersey.api.container.ContainerException : The ResourceConfig instance does not contain any root resource classes

java - 使用 Jersey Client 在 POST 中发送名称值对