搭配 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();
}