JAX-RS 2.0 通过@NameBinding注释过滤参数
我创建了一些 JAX-RS 2.0 资源(使用在 Servlet 容器中运行的 Jeresey 2.4)和一个过滤器来处理身份验证和授权,可以通过@NameBinding注释有选择地应用。这一切都很好。
我希望能够在此注释上定义一些参数(特别是访问每个方法/资源所需的安全权限),这些参数可以在运行时可供筛选器使用以更改此行为。
我注意到拦截器可以通过javax.ws.rs.ext.InterceptorContext.getAnnotations()来做到这一点,但是在javax.ws.rs.container.ContainerRequestContext中没有等效的过滤器。任何想法如何实现这一点?我希望能够做如下操作:
@Target({TYPE, METHOD})
@Retention(value = RetentionPolicy.RUNTIME)
@NameBinding
public @interface Secured {
String[] requiredPermissions() default {};
}
@Secured
@Priority(Priorities.AUTHENTICATION)
public class SecurityRequestFilter implements ContainerRequestFilter {
@Override
public void filter(ContainerRequestContext containerRequestContext) throws IOException {
// extract credentials, verify them and check that the user has required permissions, aborting if not
}
}
@Path("/userConfiguration/")
public class UserConfigurationResource {
@GET
@Produces(MediaType.APPLICATION_XML)
@Secured(requiredPermissions = {"configuration-permission"})
public Response getConfig(@Context HttpServletRequest httpServletRequest) {
// produce a response
}
}