gpt4 book ai didi

java - Jersey REST 扩展方法

转载 作者:行者123 更新时间:2023-11-30 08:17:58 24 4
gpt4 key购买 nike

我想知道是否可以使用 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)。有点像

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com