【问题标题】:Extracting the resource method name from JAX-RS ContainerRequestFilter & ContainerResponseFilter从 JAX-RS ContainerRequestFilter 和 ContainerResponseFilter 中提取资源方法名称
【发布时间】:2018-11-24 03:13:27
【问题描述】:

我有一个过滤器类

    @Provider
    @PreMatching
    @Priority(1700)
    A_authenticationFilter implements ContainerRequestFilter 
    {
    try {
            // Logic
            }
    catch {
        throw Exception
    }
    }

另一个过滤器类

    @Provider
    @PreMatching
    @Priority(5000)
    B_authenticationFilter implements ContainerRequestFilter,ContainerResponseFilter {

    @Context
    ResourceInfo resourceInfo;

    @Override
    public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) { }

    @Override
    public void filter(ContainerRequestContext requestContext { }


    }

控制器类 //JAX-RS 控制器

    @Path
    TokenServicesImpl {

    @POST
    @Path
    public Response login() {
    }

    }

发生的情况是,当我想调用 Controller 类的登录时,它会通过第一个 A_authenticationFilter 并且由于标头中的一些验证错误而失败,因此登录方法不会被执行并且 resourceInfo.getResourceMethod() 在 B_authenticationFilter 的过滤器中解析为 null(ContainerRequestContext requestContext, ContainerResponseContext responseContext)。

我想只有在执行控制器方法时才会填充 resourceInfo。如果登录方法没有被执行,那么有没有其他方法可以让我使用资源方法名称填充 resourceInfo 对象,即其中的“登录”?

【问题讨论】:

  • 您能否添加一些代码来解释您的问题。谢谢。并尝试详细说明。假设我们对您的代码一无所知,重新阅读您的问题几次,并尝试填补您认为我们需要知道的所有漏洞以帮助您。
  • @Paul Samsotha 抱歉,问题不清楚。这是一个更具描述性的

标签: jax-rs


【解决方案1】:

如果您想使用ResourceInfo,请从过滤器中删除@PreMatching 注释。来自@PreMatching 文档:

在传入请求与特定资源方法匹配之前,JAX-RS 运行时会将标记有@PreMatching 注释的过滤器全局应用于所有资源。 [...]

一旦请求尚未与任何资源方法匹配,则此信息不可用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-26
    • 2013-12-09
    • 2014-09-14
    • 1970-01-01
    • 2010-12-21
    • 2015-02-07
    相关资源
    最近更新 更多