gpt4 book ai didi

java - Jersey 请求过滤器仅在某些 URI 上

转载 作者:IT老高 更新时间:2023-10-28 20:31:23 24 4
gpt4 key购买 nike

我正在尝试使用 ContainerRequestFilter 对进入我的服务的请求进行一些验证。一切正常,但是有一个问题 - 每个请求都会通过过滤器,即使某些过滤器永远不会应用于它们(一个过滤器仅在 ResourceOne 上验证,另一个仅在 ResourceTwo 上验证等)

有没有办法将过滤器设置为仅在特定条件下对请求调用?

虽然它不是阻碍或阻碍,但如果能够阻止这种行为就好了:)

最佳答案

我假设您使用的是 Jersey 2.x(JAX-RS 2.0 API 的实现)。

您有两种方法可以实现您的目标。

1.使用名称绑定(bind):


1.1 创建带有@NameBinding 注解的自定义注解:

@NameBinding
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface AnnotationForResourceOne {}

1.2。使用您的注释创建过滤器:

@Provider
@AnnotationForResourceOne
public class ResourceOneFilter implements ContainerRequestFilter {
...
}

1.3。并将创建的过滤器与选定的资源方法绑定(bind):

@Path("/resources")
public class Resources {
@GET
@Path("/resourceOne")
@AnnotationForResourceOne
public String getResourceOne() {...}
}

2.使用 DynamicFeature:


2.1。创建过滤器:

public class ResourceOneFilter implements ContainerRequestFilter {
...
}

2.2。实现 javax.ws.rs.container.DynamicFeature 接口(interface):

@Provider
public class MaxAgeFeature implements DynamicFeature {
public void configure(ResourceInfo ri, FeatureContext ctx) {
if(resourceShouldBeFiltered(ri)){
ResourceOneFilter filter = new ResourceOneFilter();
ctx.register(filter);
}
}
}

在这种情况下:

  • 过滤器没有使用 @Provider 注释;
  • configure(...) 方法被每个资源方法调用;
  • ctx.register(filter) 将过滤器与资源方法绑定(bind);

关于java - Jersey 请求过滤器仅在某些 URI 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23641345/

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