gpt4 book ai didi

java - Jersey ResourceFilter 和 spring

转载 作者:行者123 更新时间:2023-12-01 04:42:25 24 4
gpt4 key购买 nike

我正在使用 Jersey 1.17 和 Jersey-Spring 1.8。

我正在尝试正确安装 Jersey ResourceFilter。我希望这个过滤器适用于整个应用程序。

我已将 ResourceFilter 实现定义为 spring 中的 bean(在 XML 中定义),并使用 @Provider 注释对其进行注释。

@Provider
public class ContainerResourceFilterTest implements ResourceFilter
{
public ContainerRequestFilter getRequestFilter()
{
return null; //TODO
}

public ContainerResponseFilter getResponseFilter()
{
return null; //TODO
}
}

但是当我发送请求时它不会被命中。

如果我在特定资源上使用 @ResourceFilters 注释,那么它会按预期工作,但我不想在每个类上都这样做。

如何注册应用程序范围内的过滤器?

最佳答案

回答我自己的问题。

进一步阅读 jersey 源代码后,我发现 @Provider 注释对 ResourceFilterFactoryContainerRequest/Response 没有任何作用。这些只能通过以下两种方式之一注册

  • 使用 META-INF/服务
  • 使用 servlet 的初始化参数,例如在 web.xml 中

    <init-param>
    <param-name>com.sun.jersey.spi.container.ResourceFilters</param-name>
    <param-value>com.my.path.ResourceFilterFactory</param-value>
    </init-param>

不知道为什么代码不检查已注册的 spring bean 中是否有实现适当接口(interface)的 @Provider。

值得注意的是,注册一个实现 ResourceFilter 的类对于上述任何一种方法都不起作用。您必须为 ResourceFilterFactory 执行此操作,并返回 ResourceFilter 实现。

好消息是,一旦您让 jersey 知道需要注册的,它就会调用 spring 来提供这些类,以便 Autowiring 等正常工作。

关于java - Jersey ResourceFilter 和 spring,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16306568/

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