Java 如何在jax-rs';ContainerRequestFilter
我编写了一个扩展ContainerRequestFilter的类,用于权限检查。如何获取匹配方法的批注以进行权限检查Java 如何在jax-rs';ContainerRequestFilter,java,rest,permissions,jax-rs,cxf,Java,Rest,Permissions,Jax Rs,Cxf,我编写了一个扩展ContainerRequestFilter的类,用于权限检查。如何获取匹配方法的批注以进行权限检查 @javax.ws.rs.ext.Provider public class AuthorizationRequestFilter implements ContainerRequestFilter { public void filter(ContainerRequestContext requestContext) throws IOException { /
@javax.ws.rs.ext.Provider
public class AuthorizationRequestFilter implements ContainerRequestFilter {
public void filter(ContainerRequestContext requestContext) throws IOException {
// how can I get resources' methods' annotation here?
// from the resource below , I want to checkout whether the target matched method contains the @ReadPermission annotation
}
}
@Path("/region")
public class Region {
@POST
@Path("/{region_id}")
@Produces({MediaType.APPLICATION_JSON , MediaType.APPLICATION_XML})
@ReadPermission
public String getRegion() {
return null;
}
}
您可以使用以下代码(特定于CXF): 或者这个(JAX-RS通用)
您可以使用以下代码(特定于CXF): 或者这个(JAX-RS通用)
它在cxf框架中工作。但这取决于cxf库。当我将jax-rs实现从cxf更改为另一个(例如:Jersey)时。这是行不通的。是否有只依赖jax-rs-lib的解决方案?毕竟,它现在对我有用了,多谢了看看这个答案:。它适用于jersey,但使用jax rs标准。我还没有在cxf框架中使用CXFIt works对其进行测试。但这取决于cxf库。当我将jax-rs实现从cxf更改为另一个(例如:Jersey)时。这是行不通的。是否有只依赖jax-rs-lib的解决方案?毕竟,它现在对我有用了,多谢了看看这个答案:。它适用于jersey,但使用jax rs标准。我没有用CXF测试过,最好的解决方案就是最好的解决方案
public class AuthorizationRequestFilter implements ContainerRequestFilter {
public void filter(ContainerRequestContext requestContext) throws IOException {
Message message = JAXRSUtils.getCurrentMessage();
OperationResourceInfo operation = message.getExchange().get(OperationResourceInfo.class);
Method m = operation.getMethodToInvoke();
boolean hasAnnotation = m.getAnnotation(ReadPermission.class) != null;
}
}
@Provider
public class AuthorizationRequestFilter implements ContainerRequestFilter {
@Context
private ResourceInfo resourceInfo;
@Override
public void filter(final ContainerRequestContext requestContext) throws IOException {
resourceInfo.getResourceMethod().getAnnotation(ReadPermission.class);
}
}