当前位置: 首页 > 面试题库 >

球衣请求过滤器仅在某些URI上

冯曾笑
2023-03-14
问题内容

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

有没有一种方法可以将过滤器设置为仅在特定条件下只能在请求上调用?

虽然它不是障碍或障碍,但是能够阻止这种行为会很好:)


问题答案:

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

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

1.使用名称绑定:

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。并将创建的过滤器与所选资源方法绑定:

@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接口

@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) 用资源方法绑定过滤器;


 类似资料:
  • 问题内容: 我如何查看Jersey生成并发送到服务器的实际请求?我在处理特定请求时遇到问题,运行Web服务器的同伴要求查看完整的请求(带有标头等)。 问题答案: 如果您仅使用Jersey客户端API,则LoggingFilter(客户端过滤器)应该可以帮助您: 否则,您可以使用其他LoggingFilter(容器过滤器)再次在服务器上记录请求和响应。

  • 我正在Apache7.xx应用程序上开发Spring MVC,并且没有任何错误地设置了所有内容。 我有一个应用程序将我的dispatcher servlet映射到HomeController,HomeController为视图“home/view”提供服务,该视图也在工作。 spring-servlet相关片段(在我的例子中是cmgr-servlet) applicationcontext.xml

  • 我需要在java上开发简单的web服务。我是java技术新手,根据几篇文章,我决定将JAX-RS(Jersey)与嵌入式http服务器(Grizzly2)结合使用,因为它看起来适合构建REST服务,部署似乎很简单。 在我的开发环境中,所有工作都很完美(使用IntllijIdea)。 但当我尝试在测试服务器上部署时,每个请求都返回“500内部错误”(偶数/application.wadl) 简单资源

  • 如spring boot博客所述 我尝试自定义我的对象序列化。 在我的配置中添加了一个新的配置bean之后 当我尝试输出类用户的实例时,json结果不在CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES中 也许我需要在我的Jersey配置中注册一些东西来激活我的自定义obejctMapper配置 谢谢

  • 我的Android应用程序无法安装在一些“随机”、较旧的API设备上(任何低于API级别25的设备),错误如下: 所以,基本上看起来… API 我见过类似的问题,答案与小写的包名有关。我已经有了。 有人有什么想法吗? 舱单: BTW我用的是Visual Studio 2019和一夫一妻制3.7

  • 在Jersey中,可以添加或 两者都是使用PackagesResourceConfig添加的: 谢谢