2016-12-28 20 views
1

我想用某种“角色”属性注释我的所有JAX-RS资源,这些属性将通过访问控制过滤器通过上下文读取。这样的JAX-RS资源的一个例子是(伪)Java(Jersey 2 + Grizzly 2)终端的JAX-RS自定义资源注释?

@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; 
    } 
} 

我我一直在挖:

回答

1

刚刚注入ResourceInfo进入过滤器类。从那里你可以得到资源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(); 
    } 
} 
+0

不确定你的意思。如果您看到错误,您可以进行编辑。 –